给出图像a和b:
和当前结果:
我想将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中寻找解决方案。
答案 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);
并且结果如下: