【发布时间】:2021-09-01 08:38:57
【问题描述】:
Opencv 版本:4.5
我正在尝试通过将对象设置在网格上并尽可能接近自上而下的照片来重新创建对象的尺寸,然后我将获得最大边界矩形的轮廓,然后进行透视翘曲。
我目前无法获得大边界正方形的轮廓,但是它不断地只找到较小的矩形/正方形,我认为这些矩形/正方形不够大,无法正确修复视角。
第一张图片:原图
我的代码:
import imutils
import numpy as np
import cv2 as cv
# load the query image
image = cv.imread("path/to/image")
# make image greyscale, blur, find edges
grayscale_image = cv.cvtColor(image, cv.COLOR_BGR2GRAY)
thresh = cv.adaptiveThreshold(grayscale_image, 255, cv.ADAPTIVE_THRESH_GAUSSIAN_C,
cv.THRESH_BINARY, 11, 2)
# find contours in the threshed image, keep only the largest
# ones
cnts = cv.findContours(
thresh.copy(), cv.RETR_LIST, cv.CHAIN_APPROX_SIMPLE)
cnts = imutils.grab_contours(cnts)
cnts = sorted(cnts, key=cv.contourArea, reverse=True)[:5]
# draw contours for reference
cv.drawContours(image, cnts, -1, (0, 255, 0), 3)
我尝试在精明边缘检测中使用双边滤波器或高斯模糊,而不是自适应阈值处理,但结果仍然找不到大矩形。
任何帮助将不胜感激,因为我不知道为什么它无法检测到更大的正方形。另外,如果人们认为有更好的方法来固定视角以便我可以准确地重新创建电路板尺寸,请告诉我。
【问题讨论】:
-
没有必要画一个大的矩形,已知的网格点就足以适应透视,即使是不规则的放置。我建议您分解水平和垂直部分中的所有轮廓以找到角落(删除倾斜部分)。如果需要,您可以只保留靠近图像边缘的那些。
标签: python opencv image-processing opencv-contour