我试图将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的类型?
答案 0 :(得分:1)
哪个州:
rtype所需的输出矩阵类型,或者更确切地说,是自的深度 通道数与输入数相同;如果rtype是 否定,输出矩阵将与输入具有相同的类型。
你可以看到频道的数量是相同的。
不确定你想要实现什么......但是OpenCV不知道要在其他频道中添加什么数据,据我所知没有直接的方法......如果你想复制数据您可以将cvtColor
与GRAY2RGBA
标记或类似内容一起使用,它会创建具有相同值的额外渠道....您还可以尝试使用merge
或{{1} } ...你应该避免调整大小+重塑,因为数据必须是:
mixChannels
这意味着数据以每像素4个值组织,因此C1应来自每个像素。我想如果你告诉我们要做什么,答案可能会更准确一些。
答案 1 :(得分:0)
您可以尝试使用convertScaleAbs
.PX.*