2020-10-12
python版opencv模板匹配及ROI区域选取
首先准备两张图,一张输入图像,一张模板图像。注意模板图像尺寸要和原始图像中的模板尺寸相同。
输入图像:
模板图像:
实现代码如下:
# -- coding:utf-8 --
import cv2
img = cv2.imread(“image.jpg”, 0)
img2 = img.copy()
template = cv2.imread(“template.jpg”, 0)
w, h = template.shape[::-1]
# 匹配效果对比算法
methods = [‘cv2.TM_CCOEFF’, ‘cv2.TM_CCOEFF_NORMED’, ‘cv2.TM_CCORR’,
‘cv2.TM_CCORR_NORMED’, ‘cv2.TM_SQDIFF’, ‘cv2.TM_SQDIFF_NORMED’]
img = img2.copy()
method = eval(methods[0])
res = cv2.matchTemplate(img, template, method)
min_val, max_val, min_loc, max_loc = cv2.minMaxLoc(res)
if method in [cv2.TM_SQDIFF, cv2.TM_SQDIFF_NORMED]:
top_left = min_loc
else:
top_left = max_loc
bottom_right = (top_left[0] + w, top_left[1] + h)
cv2.rectangle(img, top_left, bottom_right, 255, 2)
cv2.imshow(“show”, img)
cv2.waitKey(0)
处理完效果图:
import cv2
img = cv2.imread("./image.jpg")
img2 = img.copy()
bbox = cv2.selectROI(windowName=“roi”, img=img, showCrosshair=True, fromCenter=False)
x, y, w, h = bbox
cv2.rectangle(img=img, pt1=(x, y), pt2=(x + w, y + h), color=(0, 0, 255), thickness=2)
cv2.imshow(“roi”, img)
roiImage = img2[bbox[1]:bbox[1]+bbox[3], bbox[0]:bbox[0]+bbox[2]]
cv2.imwrite("./roi.jpg", roiImage)
cv2.waitKey(0)
cv2.destroyAllWindows()