无法更改opencv中的mat类型

时间:2018-02-14 19:32:30

标签: c++ ios opencv

我试图将CV的类型从CV_8UC1更改为CV_8UC4。

cv::Mat tempCVImg2;
cv::Mat tempMat3;
cvImage2.convertTo(tempCVImg2, CV_8UC4);
tempMat2.convertTo(tempMat3, CV_8UC4);

NSString *strType1 = [NSString stringWithCString:type2str(tempCVImg2.type()).c_str()
                                        encoding:[NSString defaultCStringEncoding]];
NSString *strType = [NSString stringWithCString:type2str(tempMat3.type()).c_str()
                                       encoding:[NSString defaultCStringEncoding]];

cv::cvtColor(cvImage2, tempMat2, cv::COLOR_BGR2GRAY);

它在cvtColor崩溃,因为它期待CV_8UC4但收到了CV_8UC1。

为什么选择cvImage2.convertTo(tempCVImg2,CV_8UC4);是不是改变了mat cvImage2的类型?

2 个答案:

答案 0 :(得分:1)

它写在documentation of convertTo

哪个州:

  

rtype所需的输出矩阵类型,或者更确切地说,是自的深度   通道数与输入数相同;如果rtype是   否定,输出矩阵将与输入具有相同的类型。

你可以看到频道的数量是相同的。

不确定你想要实现什么......但是OpenCV不知道要在其他频道中添加什么数据,据我所知没有直接的方法......如果你想复制数据您可以将cvtColorGRAY2RGBA标记或类似内容一起使用,它会创建具有相同值的额外渠道....您还可以尝试使用merge或{{1} } ...你应该避免调整大小+重塑,因为数据必须是:

mixChannels

这意味着数据以每像素4个值组织,因此C1应来自每个像素。我想如果你告诉我们要做什么,答案可能会更准确一些。

答案 1 :(得分:0)

您可以尝试使用convertScaleAbs

.PX.*