我有一个咖啡罐的图像,橙色的盖子位置,我想找到.就这个
.
gcolor2实用程序显示盖子中心的HSV为(22,59,100).问题是如何选择颜色的限制呢?我尝试了min =(18,40,90)和max =(27,255,255),但是出乎意料
这是Python代码:
import cv
in_image = 'kaffee.png'
out_image = 'kaffee_out.png'
out_image_thr = 'kaffee_thr.png'
ORANGE_MIN = cv.Scalar(18, 40, 90)
ORANGE_MAX = cv.Scalar(27, 255, 255)
COLOR_MIN = ORANGE_MIN
COLOR_MAX = ORANGE_MAX
def test1():
frame = cv.LoadImage(in_image)
frameHSV = cv.CreateImage(cv.GetSize(frame), 8, 3)
cv.CvtColor(frame, frameHSV, cv.CV_RGB2HSV)
frame_threshed = cv.CreateImage(cv.GetSize(frameHSV), 8, 1)
cv.InRangeS(frameHSV, COLOR_MIN, COLOR_MAX, frame_threshed)
cv.SaveImage(out_image_thr, frame_threshed)
if __name__ == '__main__':
test1()
Run Code Online (Sandbox Code Playgroud) 我们一直在学习像 Sobel 和 Roberts 的卷积矩阵这样的方法来检测图像中的边缘,扩展到 Canny 方法来清除它们。但是现在,我们正在学习“线”检测,而不是“边缘”检测 - 使用霍夫变换等方法。
问题是 - 我什至不知道如何概念化“线”和“边缘”之间的区别。有人可以在不使用复杂的数学方程等的情况下向我解释这种差异吗?
image image-processing edge-detection straight-line-detection
我想获取页面的 4 个角,我采取的步骤:
findContours但一路上我发现我的解决方案有时会失败,显然我的解决方案不够健壮(可能有点幼稚的解决方案)。
我认为纸角检测失败的一些原因是:
approxPolyDP我的代码
import cv2
import numpy as np
image = cv2.imread('page1.jpg')
descalingFactor = 3
imgheight, imgwidth = image.shape[:2]
resizedImg = cv2.resize(image, (int(imgwidth / descalingFactor), int(imgheight / descalingFactor)),
interpolation=cv2.INTER_AREA)
cv2.imshow(winname="original", mat=resizedImg)
cv2.waitKey()
gray = cv2.cvtColor(resizedImg, cv2.COLOR_BGR2GRAY)
cv2.imshow(winname="gray", mat=gray)
cv2.waitKey()
img_blur = cv2.GaussianBlur(gray, (5, 5), 1)
cv2.imshow(winname="blur", mat=img_blur)
cv2.waitKey()
canny = cv2.Canny(gray,
threshold1=120,
threshold2=255,
edges=1)
cv2.imshow(winname="Canny", mat=canny)
cv2.waitKey()
contours, _ = cv2.findContours(image=canny, mode=cv2.RETR_EXTERNAL, method=cv2.CHAIN_APPROX_SIMPLE)
contours = …Run Code Online (Sandbox Code Playgroud)