C++ 无法更改opencv中的垫类型
我正在尝试将垫的类型从CV_8UC1更改为CV_8UC4C++ 无法更改opencv中的垫类型,c++,ios,opencv,C++,Ios,Opencv,我正在尝试将垫的类型从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()
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的类型?它被写入
其中指出:
rtype所需的输出矩阵类型,或者更确切地说,是自
通道数量与输入相同;如果rtype是
如果为负值,则输出矩阵的类型将与输入矩阵的类型相同
正如您所见,频道的数量将是相同的
不确定你到底想要实现什么。。。但OpenCV不知道在其他通道中额外添加哪些数据,据我所知,没有直接的方法。。。。如果要复制数据,可以使用cvtColor
和GRAY2RGBA
标志或类似标志,它将创建具有相同值的额外通道。。。。您还可以尝试使用合并
或混合频道
。。。由于数据必须是:
C1 C2 C3 C4, C1 C2 C3 C4....
这意味着数据是以每像素4个值组织的,因此C1应该来自每个像素。我想如果你告诉我你想做什么,答案可能会更准确一些。你可以尝试使用
我发布了一个关于我想做什么的问题。在这样做的过程中,我遇到了这个错误。嗯,我仍然不明白为什么需要从BGR到灰度,然后再到4通道图像?
convertScaleAbs(image);