首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >识别模板图像中的矩形

识别模板图像中的矩形
EN

Stack Overflow用户
提问于 2019-01-07 07:26:12
回答 1查看 47关注 0票数 0

因此,我正在尝试识别一个已经由边界框定义的区域。示例:

在这些图像中,这些矩形中的一些区域是白色的,一些区域是黑色的,并且大多数区域的大小完全不同。这些图像之间唯一的共同特征是红色矩形:

本质上,我要做的是创建一个随机生成的迷因机器人,将一个随机的源图像放在这些矩形定义的区域中。我已经有成吨的这些图像与这些红色矩形的预定义区域使用。我想以某种方式自动化的过程,目前每个调整大小的形状和偏移必须为每个模板定义。因此,我需要做的是识别矩形内的区域,并让它返回定义的调整大小、形状和放置源图像所需的偏移量。

我该怎么做呢?我应该在OpenCV中使用一些东西,或者我必须训练一个CNN吗?我真的在寻找正确方向的推动力,因为我对解决这个问题的最佳方法感到迷茫。

EN

回答 1

Stack Overflow用户

发布于 2019-01-07 11:51:41

我认为OpenCV可以做到。下面是您所需的步骤的简短示例。有关更多详细信息,请阅读代码中的注释。

代码语言:javascript
复制
import cv2
import numpy as np

img = cv2.imread("1.jpg")

#STEP1: get only red color (or the bounding box color) in the image
hsv = cv2.cvtColor(img, cv2.COLOR_BGR2HSV)
# define range of red color in HSV
lower_red = np.array([0,50,50])
upper_red = np.array([0,255,255])
# Threshold the HSV image to get only blue colors
mask = cv2.inRange(hsv, lower_red, upper_red)
red_only = cv2.bitwise_and(img,img, mask= mask)

#STEP2: find contour
gray_img = cv2.cvtColor(red_only,cv2.COLOR_BGR2GRAY)
_,thresh = cv2.threshold(gray_img,1,255,cv2.THRESH_BINARY)

_,contours,_ = cv2.findContours(thresh, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE)

#max contour in the image is the box you want
areas = [cv2.contourArea(c) for c in contours]
sorted_areas = np.sort(areas)
cnt=contours[areas.index(sorted_areas[-1])]
r = cv2.boundingRect(cnt)
cv2.rectangle(img,(r[0],r[1]),(r[0]+r[2],r[1]+r[3]),(0,255,0),3)

cv2.imshow("img",img)
cv2.imshow("red_only",red_only)
cv2.imshow("thresh",thresh)

cv2.waitKey()
cv2.destroyAllWindows()

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54066840

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档