大家好,在查找图像中对象的坐标时,我几乎不需要帮助。我想写一个算法,用openCv库找到图片中bug的坐标(里面有鸡(,但WITHOUT。有没有任何方法可以在不使用openCv的情况下编写这样的算法。我不知道在没有任何图书馆的情况下如何做到这一点。参考图像附于此
首先,除了OpenCV之外,还有一些用于Python的视觉库,有些可能包含用于模式识别的函数。
对于自己的实现,您需要某种方式来访问图像的像素,所以您必须使用一些库。
在最简单的情况下(慢速(遍历所有像素,将大图像的矩形与小图像的矩形(模式(进行比较。
为了让事情更快,你可以实现和应用图像相关-需要使用FFT(快速傅立叶变换(。相关结果的最大值可能对应于图案相对于大图像的偏移。此方法用于OpenCVmatchTemplate
函数。
我假设您可以访问您搜索的bug的图像。如果你想在不使用OpenCV的情况下找到图像中的对象,那么你的算法应该很简单。最简单的算法是将物体与每个位置的图像进行比较。我从输入图像中裁剪了这个bug,并在图像中进行了搜索,如下面测试的代码所示。代码在正确的位置找到了对象。以下代码在灰度图像中查找灰度补丁。
img=imread('w5YEo.jpg'); img=rgb2gray(img); szImg=size(img);
bug=imread('bug.jpg'); bug=rgb2gray(bug); szBug=size(bug); bug_coord=0;
for i1=1:szImg(1,1)-szBug(1,1) %scan image
for j1=1:szImg(1,2)-szBug(1,2) %scan image
%Measure image correlation using subtraction
patch=img(i1:i1+szBug(1,1)-1,j1:j1+szBug(1,2)-1);
img_diff=patch-bug;
if abs(sum(sum(img_diff)))<50000 %Threshold determined empirically
bug_coord=[i1 j1];
end
end
end
可以对图像应用下采样以提高上述代码的速度。另一个改进可以通过找到图像中的边缘来实现。这样,可以更快地计算图像之间的相关性。到目前为止,已经开发了许多边缘检测算法:Sobel、Roberts、Canny等人。