使用OpenCvC++中的原始图像作为掩码,从图像中删除徽标
Remove logo from images with using original image as a mask in OpenCv C++
首先,我为我的英语感到抱歉。。
我是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
相关文章:
- 位移操作和位掩码未检测到重复字符
- OpenCV - 带有掩码的absdiff
- 生成前缀位掩码
- 如何从__m64值的 lsb 创建 8 位掩码?
- 如何对无符号长 int 进行位掩码?
- 删除K的背景掩码-意味着Python或C++中的集群/
- 如何在C++中优雅地处理位掩码
- 将uint64_t位掩码转换为 std::布尔数组
- 使输入二进制掩码适应 ITK 网格生成器
- 如何从 getifaddr 读取子网掩码
- 优化从子位掩码生成父位掩码
- 基于模式创建位掩码作为 constexpr
- 使用二进制掩码 C++ ITK 获取感兴趣区域
- C++中的运行时位复制(位掩码)
- 根据 IP 和掩码C++打印所有 IP
- C++设置"blank"或重置 ifstrean (ios) 的异常掩码
- OpenCV 检测带有掩码的斑点
- 在Blackberry 10 Cascades中,有一种方法可以使用图像掩码或alpha通道更改Blackberry C
- 使用掩码获取图像像素
- 使用OpenCvC++中的原始图像作为掩码,从图像中删除徽标