首先,我为我的英语感到抱歉。。
我是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