在opencv中将两个带遮挡的图像添加到一个没有遮挡的图像中

时间:2014-10-02 18:12:30

标签: opencv

给出图像a和b:

enter image description here enter image description here

和当前结果:

enter image description here

我想将a和b一起添加到c并删除添加它们的行。

auto a = imread(a_path);
auto b = imread(b_path);
cv::Mat c;
add(a, b,c);
imwrite(c_path, c);

什么是最简单的解决方案,可以做得更好,然后我正在做的这个简单的添加。

在opencv中寻找解决方案。

1 个答案:

答案 0 :(得分:0)

我用一种修复方法发泄,因为这是我之前项目中唯一的东西。可能更简单,但这很有效。

auto a = imread(a_path);
auto b = imread(b_path);

std::vector<std::vector<Point> > ca, cb;
std::vector<Vec4i> ah, bh;

cv::Mat gray;
cv::cvtColor(a, gray, COLOR_BGR2GRAY);
findContours(gray, ca, ah, RETR_EXTERNAL, CHAIN_APPROX_NONE);

cv::cvtColor(b, gray, COLOR_BGR2GRAY);
findContours(gray, cb, bh, RETR_EXTERNAL, CHAIN_APPROX_NONE);

cv::Mat m1 = cv::Mat::zeros(256, 256, CV_8UC1);
cv::Mat m2 = cv::Mat::zeros(256, 256, CV_8UC1);
cv::Mat m3 = cv::Mat::zeros(256, 256, CV_8UC1);

drawContours(m1, ca, 0, 255,-1);
drawContours(m2, cb, 0, 255,-1);
bitwise_and(m1, m2, m3);

cv::Mat c;
add(a, b,c);    
inpaint(c, m3, c, 5, INPAINT_NS);

imwrite(c_path, c);

并且结果如下: enter image description here