7

ソース画像のどの位置に特定のサブ画像が表示されるかを知りたい(例:ソース画像:http: //i.pictr.com/6xg895m69q.png、サブ画像:http://i.pictr。 com / jdaz9zwzej.png)。配列をOpenCVに「読み取り可能」にするために変換する必要があることを私が知っている限り、これは私が試したものですが、何らかの理由で機能しません。これまでの私のコードは次のとおりです。

 from PIL import Image
 import numpy
 from pylab import *
 import cv2
 import cv

 image = cv2.imread('source_img.jpg')
 template = cv2.imread('template_img.jpg')

 im = cv.fromarray(image)
 templ = cv.fromarray(template)
 result = numpy.zeros(shape=(1,10)) ##create a matrix with 0s
 a = cv.fromarray(result)
 cv.MatchTemplate(im, templ, a, cv.CV_TM_CCORR)
 print result
 print image

私の目標は、結果の配列にサブイメージの座標を書き込むことです(配列の残りの部分は値0を保持する必要があります(私のコードはこれまでこれを作成しないことを知っています)。これは、実行時に表示されるエラーメッセージです。コード:

OpenCVエラー:アサーションに失敗しました(result.size()== cv :: Size(std :: abs(img.cols --templ.cols)+ 1、std :: abs(img.rows --templ.rows)+ 1) && result.type()== CV_32F)in cvMatchTemplate、file /opt/local/var/macports/build/_opt_local_var_macports_sources_rsync.macports.org_release_tarballs_ports_graphics_opencv/opencv/work/OpenCV-2.4.3/modules/imgproc/pp/ 、376行目トレースバック(最後の最後の呼び出し):ファイル "/Users/strongbow/imagerecognition.py"、27行目、cv.MatchTemplate(im、templ、a、cv.CV_TM_CCORR)cv2.error:result.size() == cv :: Size(std :: abs(img.cols --templ.cols)+ 1、std :: abs(img.rows --templ.rows)+ 1)&& result.type()== CV_32F

私はOpenCVを初めて使用しますが、このエラーメッセージをどうすればよいか本当にわかりません。誰かアイデア/ポインタをどうするか?

4

2 に答える 2

8
import sys
import cv2
import numpy

img = cv2.imread(sys.argv[1])
template = cv2.imread(sys.argv[2])
th, tw = template.shape[:2]

result = cv2.matchTemplate(img, template, cv2.TM_CCORR_NORMED)
threshold = 0.99
loc = numpy.where(result >= threshold)
for pt in zip(*loc[::-1]):
    cv2.rectangle(img, pt, (pt[0] + tw, pt[1] + th), 0, 2)

cv2.imwrite(sys.argv[3], img)

ここに画像の説明を入力

于 2013-01-23T18:57:12.080 に答える
5
import cv2
from cv2 import cv

image = cv2.imread('1_tree.jpg')
template = cv2.imread('1_tree_detail.jpg')

values = cv2.matchTemplate(image, template, method=cv.CV_TM_SQDIFF)
best_fit_point = cv2.minMaxLoc(values)[2]
bottom_right = best_fit_point[0]+template.shape[0], best_fit_point[1]+template.shape[1]
cv2.rectangle(image, best_fit_point, bottom_right, (255,255,255))
cv2.imshow('tree',image)
cv2.imwrite('tree_match.jpg', image)
cv2.waitKey()

ここに画像の説明を入力 ここに画像の説明を入力 ここに画像の説明を入力

于 2013-01-23T18:57:22.267 に答える