OpenCV convertTo()

OpenCV convertTo()

本文关键字:convertTo OpenCV      更新时间:2023-10-16

我看到了这段代码:

image.convertTo(temp_image,CV_16SC3);

我从这里看到了convertTo()函数的描述,但让我困惑的是image。我们如何阅读上面的代码?imagetemp_image之间的关系是什么?

谢谢。

这里的其他答案是正确的,但缺乏一些细节。让我试试。

image.convertTo(temp_image,CV_16SC3);

您有一个图像image和一个目标图像temp_image。您没有指定image的类型,但可能是CV_8UC3CV_32FC3,即3通道图像(因为convertTo不改变通道的数量),其中每个通道具有深度8位(unsigned char, CV_8UC3)或32位(float, CV_32FC3)。

这行代码将改变每个通道的深度,使temp_image的每个通道深度为16位(short)。具体来说,它是signed short,因为类型说明符有S: CV_16SC3。

请注意,如果你缩小深度,就像从floatsigned short的情况一样,那么saturate_cast将确保temp_image中的所有值都在正确的范围内,即signed short的[-32768,32767]。

为什么你需要改变图像的深度?

  1. 一些OpenCV函数需要输入特定深度的图像。
  2. 您需要一个矩阵来包含不同范围的值。例如,如果你需要和(或减去)一些图像CV_8UC3(典型的BGR图像),你最好将结果存储在CV_16SC3或你可能会得到错误的结果由于饱和度,因为CV_8U图像的范围是在[0,255]
  3. 您使用imread读取,或希望使用imwrite图像存储16位深度。这通常用于(据我所知)医疗或图形应用程序,以允许更广泛的颜色范围。然而,大多数显示器不支持16位图像可视化。
  4. 可能还有其他情况,如果我错过了对你重要的一个,请告诉我。

图像是像素信息的矩阵(即1080p图像将是1,920 × 1,080矩阵,其中每个条目包含该像素的rbg值)。您所做的就是将矩阵(每个像素项,迭代)重新格式化为新的类型(CV_16SC3),以便不同的程序可以读取它。

temp_image是基于image的像素信息矩阵,格式化为CV_16SC3

第一个是,第二个是目的地。因此,它获取图像,将其转换为CV_16SC3类型并存储在temp_image.