1
dorentus 2013-08-26 15:12:28 +08:00
作业题?
|
3
oneone OP @Keyes 就是找图片,比如图片A的内容是一个围棋的棋盘,图片B是的内容是以一颗黑子。找图就是要从图片A中将所有的B图的坐标找出来。
|
4
icenan2 2013-08-26 15:41:02 +08:00 1
你这没说太明白嘛,用什么图像处理的库?
|
5
passluo 2013-08-26 15:44:35 +08:00 1
200。。。。外快。。。我觉得这还是发到猪八戒上去吧。。。
|
6
felix021 2013-08-26 15:51:59 +08:00
Python的话写起来应该会比较快。
|
7
LetFoxRun 2013-08-26 15:58:40 +08:00
需要图像处理的知识,不会。
|
11
jesse_luo 2013-08-26 22:41:20 +08:00
为什么觉得是C++……
|
12
liuyl 2013-08-26 22:49:32 +08:00
模板匹配吧?拿opencv改一改就好了
|
13
msg7086 2013-08-27 04:41:30 +08:00
以前图像处理课上是用matlab的矩阵运算来做的。
如果是精确像素点匹配的话倒还是容易,直接像做strcmp那样比像素点就行了。 如果是相似匹配的话,我觉得200肯定是拿不下来的,2000到20000应该差不多吧。 |
14
raptor 2013-08-27 09:23:40 +08:00
精确匹配除非是无损图像格式,用JPEG之类有损的话,必须相似匹配
|
15
10iii 2013-08-27 10:24:44 +08:00 1
说个思路吧,不管时间复杂度:
struct image { int w; int h; int* buf; } imageFoFind, imageFindFrom; findImagesFuzzilyIgnoreColor(imageToFind, imageFindFrom, colorValue, fuzzyValue) { int i,j; for (i=0;i<imageFindFrom.w-imageToFind.w;i++) for (j=0;j<imageFindFrom.h-imageToFind.h;j++) if match(imageToFind, imageFindFrom, colorValue, fuzzyValue,i,j) location.push([i,j]); return location; } int match (imageToFind, imageFindFrom, colorValue, fuzzyValue,i,j) { int max=imageToFind.w*imageToFind.h*(1-fuzzyValue); int d=0,x,y; for (x=0;x<imageToFind.w;x++) for (y=0;y<imageToFind.h;y++) { if ((imageToFind.buf[x][y]!=imageFindFrom[i+x][j+y])&&(imageFindFrom[i+x][j+y]!=colorValue)&&(imageToFind.buf[x][y]!=colorValue)) d++; if d>max return 0; } return 1; } 基本就这样吧。不排除语法错误,编译肯定通不过。 |
20
msg7086 2013-08-28 03:01:15 +08:00 1
楼主有兴趣的话可以来读一下我们的课程PPT。有介绍最基本的SIFT和HOG算法之类的东西。
http://web.engr.oregonstate.edu/~sinisa/courses/OSU/CS556/CS556Slides.html |
21
passluo 2013-08-28 03:08:00 +08:00 via Android
看了大家的回答,对我之前的回复感动羞耻与忏悔…我太低俗了…sorry…
|