如何检测一个图像的矩形区域并将另一个图像合并到该区域

时间:2013-12-04 12:24:58

标签: c# opencv image-processing emgucv aforge

我是图像处理的新手,我必须处理图像文件jpeg1如下:

1.将文本检测为“要检测的文本!”在jpeg1

2.将矩形区域检测为“要检测的矩形”,并将另一个图像seal.jpeg合并到矩形区域。

我不知道如何用C#实现这个目标?

我的图片文件jpeg1为: jpeg1 to process

原始图像jpeg1为: jpeg1 to process 密封图像合并为: seal to merge

1 个答案:

答案 0 :(得分:2)

我可以帮助您解决问题2.我不使用C#,我只是编写了一个简单的Matlab代码来提取您想要的矩形区域。我假设opencv也有那些图像处理工具箱。请看下面的评论。

file = 'http://i.stack.imgur.com/zPfdy.jpg';  % Your image provided above
img = imread(file);
img = rgb2gray(img);   % convert to gray scale image

% Canny edge detection with threshold of 0.5
img_edge = edge(img,'canny',0.5);

%Filled image between the edges
img_filled = imfill(img_edge,'holes');

%Find the filled region with the maximum area
props = regionprops(img_filled,'Area','PixelList');

max_area = props(1).Area;
max_count = 1;
for count=1:size(props,1)
if(max_area < props(count).Area)
    max_area = props(count).Area;
    max_count = count;
end
end
out_img = zeros([size(img_edge,1) size(img_edge,2)]);
pixels = props(max_count).PixelList;
for count=1:size(pixels,1)
    out_img(pixels(count,2),pixels(count,1)) = 1; % fill the maximum filled area
end
% % % % % % % % % % % % % % % % % % % % % % % % 
figure,imagesc(out_img.*double(img))

结果: enter image description here

关于文本检测,我认为如果没有一些先验信息就很难,因为你涉及的文字太多了。最好知道要检测文本的大致位置,然后我们可以尝试在更小的区域内查找文本。此外,当您针对灰度图像中可能具有不同强度的某些特定文本时,调整阈值也很棘手。 顺便说一句,我无法处理您提供的图像,因为您在要检测的文本上添加了一个强大的矩形区域,这使我很容易提取该区域,而事实并非如此。