我有一个Mat
包含黑色背景的文本和一个包含背景的Mat。我想合并2 Mat,因此文本位于背景的顶部。两个垫都是BGR(CV_8UC3)和相同的尺寸(cols和rows)。
OpenCV的做法是什么?
我知道有几个功能,但|=
和+=
正在更改文字颜色,而addWeighted()
仅在我希望一个图像略微透明时才有效。我只是想完全合并两者(除了文本图像中的黑色像素)。我正在寻找一个OpenCV函数,而不是自己进行像素编辑,如果这是一个选项,LUT
会很好。
答案 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 ...
无法测试代码,请告诉我是否有错误。