【问题标题】:changing the frame type without loosing data在不丢失数据的情况下更改帧类型
【发布时间】:2013-01-11 06:19:14
【问题描述】:

我正在使用 Opencv,我有两个框架:cv::frame1 和 cv::frame2,当我检查它们的类型时,我得到:

 frame1.type()  is 16 
frame2.type() is 21

我的问题是如何将 frame2 的类型更改为 16 而不会丢失其数据?我试过 frame2.convertTo() 没用。

任何想法?

【问题讨论】:

    标签: c++ opencv


    【解决方案1】:

    据我了解,您希望将 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);
    

    【讨论】:

    • 我同意我必须丢失一些数据,但我的问题是我丢失了所有数据
    • @Engine 你所说的“一切”是什么意思?
    • 我所有的数据都会丢失一帧满 0
    • @Engine 查看新编辑。如果这对您不起作用,您必须提供相关代码(在其中声明和初始化矩阵以及如何调用 convertTo() 否则我无法猜测出了什么问题)。另外,你检查之后的值,它们都是 0 还是你只显示图像,它都是黑色的? (如果是第二种情况,你应该乘以255才能看到图像。)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-08-23
    • 1970-01-01
    • 2012-03-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-08-21
    相关资源
    最近更新 更多