【发布时间】:2013-01-11 06:19:14
【问题描述】:
我正在使用 Opencv,我有两个框架:cv::frame1 和 cv::frame2,当我检查它们的类型时,我得到:
frame1.type() is 16
frame2.type() is 21
我的问题是如何将 frame2 的类型更改为 16 而不会丢失其数据?我试过 frame2.convertTo() 没用。
任何想法?
【问题讨论】:
我正在使用 Opencv,我有两个框架:cv::frame1 和 cv::frame2,当我检查它们的类型时,我得到:
frame1.type() is 16
frame2.type() is 21
我的问题是如何将 frame2 的类型更改为 16 而不会丢失其数据?我试过 frame2.convertTo() 没用。
任何想法?
【问题讨论】:
据我了解,您希望将 CV_32FC3(3 通道浮点)类型的图像转换为 CV_8UC3(3 通道无符号字符)。这不能在不丢失一些信息的情况下完成:在第一种情况下,每个像素有 4 个字节,而在第二种情况下,每个像素有 1 个字节,因此您知道会有一些损失。
此代码用于转换为不同的类型,对我来说效果很好:
cv::Mat A = cv::Mat(480, 640, CV_32FC3, CV_RGB(1.0,1.0,1.0));
cv::Mat B;
A.convertTo(B, CV_8UC3);
【讨论】:
convertTo() 否则我无法猜测出了什么问题)。另外,你检查之后的值,它们都是 0 还是你只显示图像,它都是黑色的? (如果是第二种情况,你应该乘以255才能看到图像。)