我是图像处理的新手,我必须处理图像文件jpeg1如下:
1.将文本检测为“要检测的文本!”在jpeg1
2.将矩形区域检测为“要检测的矩形”,并将另一个图像seal.jpeg合并到矩形区域。
我不知道如何用C#实现这个目标?
我的图片文件jpeg1为:
原始图像jpeg1为: 密封图像合并为:
答案 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))
结果:
关于文本检测,我认为如果没有一些先验信息就很难,因为你涉及的文字太多了。最好知道要检测文本的大致位置,然后我们可以尝试在更小的区域内查找文本。此外,当您针对灰度图像中可能具有不同强度的某些特定文本时,调整阈值也很棘手。 顺便说一句,我无法处理您提供的图像,因为您在要检测的文本上添加了一个强大的矩形区域,这使我很容易提取该区域,而事实并非如此。