使用OpenCvC++中的原始图像作为掩码,从图像中删除徽标

Remove logo from images with using original image as a mask in OpenCv C++

本文关键字:图像 掩码 删除 OpenCvC++ 原始 使用      更新时间:2023-10-16

首先,我为我的英语感到抱歉。。

我是OpenCV的新手,正在尝试删除图像中的徽标。我在这个网站上找到了这个答案-->如何使用OpenCV从名片中删除非文本区域?

我按照步骤写下这些代码:

int main(int argc,char** argv) {

Mat eroded,dilated,img1=imread("C:\Users\Buket\Desktop\Belgeler\Oda Kayıt Belgesi\OKB001.jpg");
int erosion_size = 6;   
Mat elementd = getStructuringElement(MORPH_CROSS,
                                    Size(2 * erosion_size + 1, 2 * erosion_size + 1), 
                                    Point(erosion_size, erosion_size) );
int dilation_size = 1;   
Mat elemente = getStructuringElement(MORPH_CROSS,
                                    Size(2 * dilation_size + 1, 2 * dilation_size + 1), 
                                    Point(dilation_size, dilation_size) );
Mat mask = Mat::zeros(img1.rows, img1.cols, CV_8UC1);
dilate(img1, dilated, elementd);
Mat lastimg;
int count =0;
do{
    lastimg = dilated;
    erode(dilated, lastimg, elemente);
    max(lastimg,img1);
    count++;
}while(count < 2);

现在我有一个图像,上面只有标志:

只是标志

这是源图像:

原始图片

在文章中,有这样一句话:"你现在有一个只有标志而没有文本的图像,用这个图像来删除标志"。但是我该怎么做呢?我研究了很多,但一无所获。。

请帮忙。。

编辑

Mat dest;
subtract(lastimg,img1,dest);
bitwise_not(dest,dest);

这个函数就是答案。

尝试以下代码,希望它能工作:

Mat img1=some_img;
Mat img2=some_img;
Mat dest;
cv::subtract(img1,img2,dest);

这将执行逐像素相减(img1-img2)。查找有关它的更多详细信息http://docs.opencv.org/modules/core/doc/operations_on_arrays.html