OpenCV - 如何将灰度转换为彩色(CV_8UC3)?
OpenCV - How to convert grayscale to color (CV_8UC3)?
我正在尝试将两个 Mat 对象添加到一起,但我遇到了一个错误。
这是工作代码:
Mat src1, src2, dst;
/// Read image ( same size, same type )
src1 = imread("lion.png");
src2 = imread("bluebell.png");
dst = src1 + 0.5 * src2;
imshow("Blend", dst);
waitKey(0);
return 0;
src1
和src2
具有相同的类型,即CV_8UC3
。但是当我尝试这个时:
Mat src1, src2, src3, dst;
/// Read image
src1 = imread("lion.png");
src2 = imread("bluebell.png", IMREAD_GRAYSCALE);
src2.convertTo(src3, COLOR_GRAY2RGB);
cout << "src1.type " << src1.type() << endl;
cout << "src2.type " << src2.type() << endl;
cout << "src3.type " << src3.type() << endl;
dst = src1 + 0.5 * src3;
imshow("Blend", dst);
waitKey(0);
return 0;
它不起作用。因为src2
和src3
都有CV_8U
的0
类型。但我希望src3
有CV_8UC3
的类型16
(根据这里(。此代码带来此错误:
OpenCV 错误:输入参数的大小不匹配(该操作既不是 cv::arithm_op 中的"数组操作数组"(其中数组具有相同的大小和相同的通道数(,也不是"数组操作标量",也不是"标量操作数组"(
如何将灰度图像转换为具有确切CV_8UC3
类型的彩色图像?
不能通过调用convertTo
来更改通道数。根据参考资料:
所需的输出矩阵类型,或者更确切地说,深度,因为通道数与输入相同;如果 rtype 为负,则 输出矩阵的类型将与输入相同。
当您有一个灰度通道的矩阵时,您可以使用cv::merge
通过将BGR通道的这个组件放在新矩阵中来创建3通道图像:
src1 = imread("lion.png");
src2 = imread("bluebell.png", IMREAD_GRAYSCALE); // one channel
cv::merge(std::vector<cv::Mat>{src2, src2, src2}, src2);
// blue, green,red as output 3-channels mat
dst = src1 + 0.5 * src2;
通过调用convertTo
,可以将存储值的数据类型(例如从整数转换为浮点数(。
相关文章:
- 将"打开的CV图像"中的"颜色"转换为整数格式
- 概念中的cv限定符需要表达式参数列表
- 将CHW格式的浮点向量转换为cv::Mat
- 错误的cv::face FacemarkLBF实例化
- 如何检查给定的参数是否为 cv::noArray()?
- 开放 CV 中的动态内存分配,用于视频处理
- 如何在 opencv 中使用 cv::VideoCapture::waitAny()
- 错误:未定义对cv::cudacodec::createVideoReader的引用
- OpenCV 3.4.1 error readNetFromTensorflow 无法在 cv::d nn::ReadProtoFromBinaryFile 中打开 .pb
- C++:从GPU内存(cudaMemcpy2D)获取BGR图像(cv::Mat)
- 选择基于另一个垫子的非零像素的cv::Mat的一部分?
- 将 cv::mat 转换为 QImage
- Inference pytorch C++ with alexnet and cv::imread image
- OpenCV 3.4.3 中对 'cv::String::d eallocate()' 错误的未定义引用
- cv::Normalise() 中的 L2_NORM 和 NORM_MINMAX 实现有什么区别?
- 将 cv::Mat 转换为 std::vector 的通用函数
- OpenCV undefined reference to 'cv::imread(cv::String const&, int)'
- 在 QML VideoOutput 中将 cv::mat 显示为 QVideoFrame
- 如何应用带有cv::cuda和C++的Canny Edge检测器?
- cv::connectedComponents vs cv::findContours 的实现和速度差异