在 c 的 opencv 中,啥函数与 Mat::convertTo 和 cvtColor() 完全相同
Posted
技术标签:
【中文标题】在 c 的 opencv 中,啥函数与 Mat::convertTo 和 cvtColor() 完全相同【英文标题】:in opencv for c what function does the exact same thing as Mat::convertTo and cvtColor()在 c 的 opencv 中,什么函数与 Mat::convertTo 和 cvtColor() 完全相同 【发布时间】:2013-09-17 04:47:19 【问题描述】:我试图理解 opencv 的 c 函数 cvSaveImage 并与此处的 2.4.6 文档有关:
函数 save-image 将图像保存到指定文件。图片格式为 根据文件扩展名选择(有关扩展名列表,请参阅 (load-image))。 只有 8 位(或在
PNG
、JPEG 2000
和TIFF
的情况下为 16 位无符号 (+16u+))单 通道或 3 通道(使用‘BGR’
通道顺序)图像可以保存使用 这个功能。如果格式、深度或通道顺序不同,请使用Mat::convertTo()
和cvtColor()
在保存前进行转换。或者,使用通用 XML I/O 函数将图像保存为 XML 或YAML
格式。
它说“如果格式、深度或通道顺序不同,请在保存前使用 Mat::convertTo()
和 cvtColor()
进行转换。”
在 c 接口中哪些函数会做同样的事情。如果可能,请在您的回复中包含示例代码。
【问题讨论】:
docs.opencv.org/modules/imgproc/doc/… 【参考方案1】:嗯.. 我认为您正在寻找 cvCvtColor:
void cvCvtColor(const CvArr *src, CvArr *dst, int code)
将图像从一种颜色空间转换为另一种颜色空间。
http://opencv.willowgarage.com/documentation/c/miscellaneous_image_transformations.html
例如,如果您有一个 RGBA 图像并希望将其转换为 BGR 以保存:
cvCvtColor(rgba_src, bgr_dst, CV_RGBA2BGR)
在实际代码中会是这样的:
/* Create an IplImage with 3 channels and 8 bits per channel,
with the same dimensions that rgba_src*/
IplImage *bgr_dst = cvCreateImage(cvGetSize(rgba_src), IPL_DEPTH_8U, 3);
cvCvtColor(rgba_src, bgr_dst, CV_RGBA2BGR);
cvReleaseImage(&rgba_src);
类似的东西。 请记住,如果 rgba_src 是来自捕获设备的帧,则不应释放它。
【讨论】:
但是 Mat::convertTo 的 c 等效项如何呢?文档中说 cvCvtColor“将图像从一种颜色空间转换为另一种颜色空间”。和 Mat::convertTo “将数组转换为另一种具有可选缩放比例的数据类型。”你能告诉我 Mat::convertTo 的 c 等价物吗 cvCvtColor 收到cvArr *
,有时可以是IplImage*
、CvMat*
甚至CvSeq*
。所以我认为它也应该起作用。查看文档,它似乎不是直接的Mat::convertTo()
替代品。 (cvMat
是Mat
的“旧”版本,它们不一样)
另一方面,如果它不起作用,你总是可以自己做。您可以自定义“从 A 类 cvMat 转换为 B 类 cvMat”。
另外,cvConvertScale
函数可以方便地使用 cvMat *
opencv.willowgarage.com/documentation/operations_on_arrays.html以上是关于在 c 的 opencv 中,啥函数与 Mat::convertTo 和 cvtColor() 完全相同的主要内容,如果未能解决你的问题,请参考以下文章
OpenCV:将 cvGoodFeaturesToTrack 与 C++ mat 变量一起使用