我遇到了这个代码:的OpenCV的ConvertTo()
image.convertTo(temp_image,CV_16SC3);
我看到的ConvertTo()函数的说明从here,但什么混淆我是image
。我们如何阅读上面的代码? image
和temp_image
之间的关系是什么?
谢谢。
我遇到了这个代码:的OpenCV的ConvertTo()
image.convertTo(temp_image,CV_16SC3);
我看到的ConvertTo()函数的说明从here,但什么混淆我是image
。我们如何阅读上面的代码? image
和temp_image
之间的关系是什么?
谢谢。
第一个是源,第二个 - 目的地。所以,它需要镜像,将其转换为类型CV_16SC3并存储在temp_image中。
图像是像素信息的矩阵(即,1080p
图像将是1,920 × 1,080
矩阵,其中每个条目包含该像素的rbg
值)。您所做的只是将该矩阵(每个像素条目,迭代地)重新格式化为一个新类型(CV_16SC3
),以便它可以被不同的程序读取。
temp_image
是基于image
格式化为CV_16SC3
的新像素信息矩阵。
这里的其他答案是正确的,但缺乏一些细节。让我尝试。
image.convertTo(temp_image,CV_16SC3);
你有源图像0和目的地图像0。未指定的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
所有值将在正确的范围内,即[-32768,32767]为signed short
。
为什么你需要改变图像的深度?
imread
阅读,或想与imwrite
存储16位深度的图像。这通常用于医疗或图形应用(AFAIK),以允许更广泛的颜色。但是,大多数显示器不支持16位图像可视化。
@Miki,啊是的,我的坏,更新 – asdf