我想掩盖彩色图像,但我得到的结果是一个完全黑色的图像,我的代码是:
Mat maskOriginal(Mat src, Mat original, Mat mask) {
original.copyTo(src, mask);
return src;
}
答案 0 :(得分:0)
注意,如何使用maskOriginal并注意遮罩元素类型。 对于给定的图像,下面的代码将在输入图像的中间保持一个圆圈,而用黑色填充其余部分。
cv::Mat img = cv::imread("image.png");
cv::Mat mask = cv::Mat::zeros(img.rows, img.cols, CV_8UC1);
cv::circle(mask, cv::Point(img.cols/2, img.rows/2),
std::min(img.rows, img.cols)/2, cv::Scalar(255), -1);
cv::Mat result;
result = maskOriginal(result, img, mask);
cv::namedWindow("result");
cv::imshow("result", result);
cv::waitKey();
答案 1 :(得分:0)
应用遮罩时,应注意src和原始图像的通道数相同,否则copyTo将无缝地重新分配新的黑色图像。从opencv doc:
该方法将矩阵数据复制到另一个矩阵。在复制数据之前,该方法会调用
m.create(this->size(), this->type());
以便在需要时重新分配目标矩阵。
https://docs.opencv.org/2.4/modules/core/doc/basic_structures.html?highlight=clone#mat-copyTo
如果这两种类型不匹配,则可以使用cvtColor
方法更改颜色,例如将CV_8UC4转换为CV_8UC3的示例,您可以执行以下操作:
cvtColor(original,original,COLOR_BGRA2BGR);