相关疑难解决方法(0)

使用`cv :: inRange`(OpenCV)为颜色检测选择正确的上下HSV边界

我有一个咖啡罐的图像,橙色的盖子位置,我想找到.就这个图片.

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)

opencv hsv color-detection

67
推荐指数
7
解决办法
17万
查看次数

图像检测中的线条和边缘有什么区别?

我们一直在学习像 Sobel 和 Roberts 的卷积矩阵这样的方法来检测图像中的边缘,扩展到 Canny 方法来清除它们。但是现在,我们正在学习“线”检测,而不是“边缘”检测 - 使用霍夫变换等方法。

问题是 - 我什至不知道如何概念化“线”和“边缘”之间的区别。有人可以在不使用复杂的数学方程等的情况下向我解释这种差异吗?

image image-processing edge-detection straight-line-detection

4
推荐指数
1
解决办法
4148
查看次数

使用openCV识别角落页面部分失败

我想获取页面的 4 个角,我采取的步骤:

  1. 转换为灰度
  2. 对图像应用阈值
  3. 应用Canny检测边缘
  4. 之后我用过findContours
  5. 为每个多边形绘制近似多边形,我的假设是相关多边形必须有 4 个顶点。

但一路上我发现我的解决方案有时会失败,显然我的解决方案不够健壮(可能有点幼稚的解决方案)。

在此输入图像描述

我认为纸角检测失败的一些原因是:

  • 手动选择阈值以进行精明检测。
  • epsilon 值相同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)

python opencv image-processing

4
推荐指数
1
解决办法
1829
查看次数