我遇到了这段代码:
image.convertTo(temp_image,CV_16SC3);
我从here看到了convertTo()函数的描述,但令我困惑的是image
。我们怎样才能阅读上面的代码? image
和temp_image
之间的关系是什么?
感谢。
答案 0 :(得分:3)
这里的其他答案都是正确的,但缺少一些细节。让我试试。
image.convertTo(temp_image,CV_16SC3);
您有来源图片image
和目的地图片temp_image
。您没有指定image
的类型,但可能是CV_8UC3
或CV_32FC3
,即3频道图片(因为convertTo
并未更改通道数),其中每个通道的深度为8位(unsigned char
,CV_ 8U C3)或32位(float
,CV_ 32F C3 )。
这行代码将改变每个通道的深度,因此temp_image
每个通道的深度为16位(short
)。具体而言,它是signed short
,因为类型说明符具有 S :CV_16 S C3。
请注意,如果您要缩小深度,例如从float
到signed short
,则saturate_cast
将确保temp_image
中的所有值都将在signed short
的[-32768,32767]范围内。
为什么需要更改图像的深度?
imread
阅读,或想要存储16位深度的imwrite
张图片。这通常用于医疗或图形应用(AFAIK),以允许更广泛的颜色。但是,大多数显示器不支持16位图像可视化。答案 1 :(得分:2)
图像是像素信息的矩阵(即,1080p
图像将是1,920 × 1,080
矩阵,其中每个条目包含该像素的rbg
值。您所做的只是将该矩阵(每个像素条目,迭代地)重新格式化为新类型(CV_16SC3
),以便可以由不同的程序读取。
temp_image
是基于格式化为image
的{{1}}的新像素信息矩阵。
答案 2 :(得分:0)
第一个是来源,第二个是目的地。因此,它需要图像,将其转换为CV_16SC3类型并存储在temp_image中。