除了黑色/透明像素之外,OpenCV函数可以合并Mat

时间:2016-08-18 09:00:22

标签: c++ opencv

我有一个Mat包含黑色背景的文本和一个包含背景的Mat。我想合并2 Mat,因此文本位于背景的顶部。两个垫都是BGR(CV_8UC3)和相同的尺寸(cols和rows)。

OpenCV的做法是什么?

我知道有几个功能,但|=+=正在更改文字颜色,而addWeighted()仅在我希望一个图像略微透明时才有效。我只是想完全合并两者(除了文本图像中的黑色像素)。我正在寻找一个OpenCV函数,而不是自己进行像素编辑,如果这是一个选项,LUT会很好。

enter image description here

1 个答案:

答案 0 :(得分:4)

试试这个:

sourceText = yourTextImage;
sourceBackground = yourBackgroundImage;

cv::Mat textTransparent;
cv::inRange(sourceText, cv::Scalar(0,0,0), cv::Scalar(0,0,0), textTransparent);
cv::imshow("transparent pixel", textTransparent); // this should show all the transparent pixel as being white. If that's not the case, adjust the range.
std::cout << "is the transparency mask ok? Press any key with openCV window focus." << std::endl;

cv::Mat result = sourceBackground.clone();
sourceText.copyTo(sourceBackground, 255-textTransparent); // copy pixels, using the created mask.

相反,您可以将sourceBackground中的透明像素复制到sourceText,因为您不需要255-textTransparent ...

无法测试代码,请告诉我是否有错误。