OpenCV convertTo()
OpenCV convertTo()
我看到了这段代码:
image.convertTo(temp_image,CV_16SC3);
我从这里看到了convertTo()函数的描述,但让我困惑的是image
。我们如何阅读上面的代码?image
和temp_image
之间的关系是什么?
谢谢。
这里的其他答案是正确的,但缺乏一些细节。让我试试。
image.convertTo(temp_image,CV_16SC3);
您有一个源图像image
和一个目标图像temp_image
。您没有指定image
的类型,但可能是CV_8UC3
或CV_32FC3
,即3通道图像(因为convertTo
不改变通道的数量),其中每个通道具有深度8位(unsigned char
, CV_8UC3)或32位(float
, CV_32FC3)。
这行代码将改变每个通道的深度,使temp_image
的每个通道深度为16位(short
)。具体来说,它是signed short
,因为类型说明符有S: CV_16SC3。
请注意,如果你缩小深度,就像从float
到signed short
的情况一样,那么saturate_cast
将确保temp_image
中的所有值都在正确的范围内,即signed short
的[-32768,32767]。
为什么你需要改变图像的深度?
- 一些OpenCV函数需要输入特定深度的图像。
- 您需要一个矩阵来包含不同范围的值。例如,如果你需要和(或减去)一些图像CV_8UC3(典型的BGR图像),你最好将结果存储在CV_16SC3或你可能会得到错误的结果由于饱和度,因为CV_8U图像的范围是在[0,255]
- 您使用
imread
读取,或希望使用imwrite
图像存储16位深度。这通常用于(据我所知)医疗或图形应用程序,以允许更广泛的颜色范围。然而,大多数显示器不支持16位图像可视化。 - 可能还有其他情况,如果我错过了对你重要的一个,请告诉我。
图像是像素信息的矩阵(即1080p
图像将是1,920 × 1,080
矩阵,其中每个条目包含该像素的rbg
值)。您所做的就是将矩阵(每个像素项,迭代)重新格式化为新的类型(CV_16SC3
),以便不同的程序可以读取它。
temp_image
是基于image
的像素信息矩阵,格式化为CV_16SC3
。
第一个是源,第二个是目的地。因此,它获取图像,将其转换为CV_16SC3类型并存储在temp_image.
相关文章:
- C++,OpenCV,尝试显示图像时"OpenCV(4.3.0) Error: Assertion failed (size.width>0 && size.height>0)"此错误
- 尝试导入pybind-opencv模块时出现libgtk错误
- 在编译C++代码(具有dlib和opencv)到WASM时面临问题
- 如何使用OpenCV将RBG图像转换为HSV,并将H、S和V值保存为C++中的3个独立图像
- OpenCV EqualizeHist()从彩色图像创建黑白图像
- 将OpenCV C++重写为EmguCV C#-如何使用指针
- OpenCV C++.快速计算混淆矩阵
- 在C++代码中包含opencv时,使用ctypes创建.so文件
- 哪些库可以通过Opencv调整曝光率
- 安装opencv失败-粘贴CMakeError.log的内容
- C++中的openCV Mat访问冲突
- OpenCV Android C++ imwrite not found
- 未定义的引用 .. 使用 OpenCV 编译 C++ 代码时,从命令行
- Mat的convertTo函数在OpenCV中将灰度图像的类型转换为CV_32F时抱怨断言错误
- OpenCV:convertTo返回白色图像(有时)
- 在 opencv for c 中,什么函数与 Mat::convertTo 和 cvtColor() 完全相同
- convertTo不在opencv中工作
- OpenCV - Mat::convertTo()断言错误
- OpenCV convertTo()
- OpenCV断言失败-convertTo