相关疑难解决方法(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万
查看次数

OpenCV更好地检测红色?

我有以下图片:

在此输入图像描述

我想使用cv::inRange方法和HSV颜色空间检测红色矩形.

int H_MIN = 0;
int H_MAX = 10;
int S_MIN = 70; 
int S_MAX = 255;
int V_MIN = 50;
int V_MAX = 255;

cv::cvtColor( input, imageHSV, cv::COLOR_BGR2HSV );

cv::inRange( imageHSV, cv::Scalar( H_MIN, S_MIN, V_MIN ), cv::Scalar( H_MAX, S_MAX, V_MAX ), imgThreshold0 );
Run Code Online (Sandbox Code Playgroud)

我已经创建了动态轨迹栏以便更改HSV的值,但是我无法获得所需的结果.

是否有关于使用最佳值(也许是过滤器)的建议?

c++ opencv colors

22
推荐指数
1
解决办法
3万
查看次数

使用Python和OpenCV查找红色

我试图从图像中提取红色.我有代码应用阈值只保留指定范围内的值:

img=cv2.imread('img.bmp')
img_hsv=cv2.cvtColor(img, cv2.COLOR_BGR2HSV)
lower_red = np.array([0,50,50]) #example value
upper_red = np.array([10,255,255]) #example value
mask = cv2.inRange(img_hsv, lower_red, upper_red)
img_result = cv2.bitwise_and(img, img, mask=mask)
Run Code Online (Sandbox Code Playgroud)

但是,正如我检查的那样,红色可以在范围内具有Hue值,比如从0到10,以及在170到180的范围内.因此,我想从这两个范围中的任何一个中保留值.我尝试将阈值从10设置为170并使用cv2.bitwise_not函数,但随后我也获得了所有白色.我认为最好的选择是为每个范围创建一个掩码并使用它们,所以我不得不在继续之前将它们连接在一起.

有没有办法使用OpenCV加入两个面具?或者还有其他方法可以实现我的目标吗?

编辑.我来的不是很优雅,但工作解决方案:

image_result = np.zeros((image_height,image_width,3),np.uint8)

for i in range(image_height):  #those are set elsewhere
    for j in range(image_width): #those are set elsewhere
        if img_hsv[i][j][1]>=50 \
            and img_hsv[i][j][2]>=50 \
            and (img_hsv[i][j][0] <= 10 or img_hsv[i][j][0]>=170):
            image_result[i][j]=img_hsv[i][j]
Run Code Online (Sandbox Code Playgroud)

它几乎满足了我的需求,而OpenCV的功能可能几乎完全相同,但如果有更好的方法(使用一些专用函数和编写更少的代码),请与我分享.:)

python opencv image image-processing hsv

20
推荐指数
2
解决办法
3万
查看次数

如何在Python-OpenCV中使用`cv2.inRange`检测两种不同的颜色?

如何定义两种不同颜色的"下"和"上"范围,例如红色和蓝色(因为红色和蓝色在HSV颜色中彼此不相邻)

这个属于红色:

lower_red = np.array([160,20,70])
upper_red = np.array([190,255,255])
Run Code Online (Sandbox Code Playgroud)

这个属于蓝色:

lower_blue = np.array([101,50,38])
upper_blue = np.array([110,255,255])
Run Code Online (Sandbox Code Playgroud)

我尝试使用if条件将它们组合起来或制作自己的功能但不起作用,你们能告诉我解决方案吗?

P/s:Python中的OpenCV

python opencv

9
推荐指数
1
解决办法
2万
查看次数

如何定义阈值以仅检测图像中的绿色对象:Opencv

我只是想从自然环境中捕获的图像中仅检测绿色物体.如何定义它?因为在这里我要通过阈值让我们说'x',通过使用这个x我想只获得一种颜色的绿色对象(白色)其他必须出现在另一种颜色(黑色)请指导我做这个.提前致谢.

python opencv image-processing threshold

8
推荐指数
3
解决办法
3万
查看次数

如何检测检测到的形状 OpenCV 的颜色

我编写了下面的代码来检测图像中的 3D 形状,并且它工作正常。

现在我需要检测形状内的颜色并计算它们。

谁能指出我应该从哪里开始进行颜色检测?

下面的形状检测代码,也许会有用:

import cv2
import numpy as np

cv2.imshow('Original Image',rawImage) 
cv2.waitKey(0)

hsv = cv2.cvtColor(rawImage, cv2.COLOR_BGR2HSV)
cv2.imshow('HSV Image',hsv)
cv2.waitKey(0)

hue ,saturation ,value = cv2.split(hsv)
cv2.imshow('Saturation Image',saturation)
cv2.waitKey(0)

retval, thresholded = cv2.threshold(saturation, 0, 255, cv2.THRESH_BINARY + cv2.THRESH_OTSU)
cv2.imshow('Thresholded Image',thresholded)
cv2.waitKey(0)

medianFiltered = cv2.medianBlur(thresholded,5)
cv2.imshow('Median Filtered Image',medianFiltered)
cv2.waitKey(0) 

cnts, hierarchy = cv2.findContours(medianFiltered, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE)

for c in cnts:
# compute the center of the contour
M = cv2.moments(c)
cX = int(M["m10"] / M["m00"])
cY = int(M["m01"] / M["m00"])


first …
Run Code Online (Sandbox Code Playgroud)

python opencv colors object-detection color-detection

5
推荐指数
1
解决办法
9309
查看次数

检测像素是否为红色

我们可以如下定义 HSV 中红色的范围。我想检测某个像素是否是红色的?我怎样才能在Python中做到这一点?我花了一整天,但无法找到解决方案。请解决我的问题。我对 Python 很陌生。我正在使用的代码是:

img=cv2.imread("img.png")
img_hsv=cv2.cvtColor(img, cv2.COLOR_BGR2HSV)

# lower mask (0-10)
lower_red = np.array([0,50,50])
upper_red = np.array([10,255,255])
mask0 = cv2.inRange(img_hsv, lower_red, upper_red)

# upper mask (170-180)
lower_red = np.array([170,50,50])
upper_red = np.array([180,255,255])
mask1 = cv2.inRange(img_hsv, lower_red, upper_red)
image_height,image_width,_=img.shape    
for i in range(image_height):
   for j in range(image_width):
       if img_hsv[i][j][1]>=lower_red and img_hsv[i][j][1]<=upper_red:
          print("Found red")
Run Code Online (Sandbox Code Playgroud)

python opencv numpy image-processing hsv

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

如何用opencv读取电表指针?

我不一定需要源代码,但寻找伪代码或如何解决这个问题的想法。我有一个摄像头对准我的水表,想要将使用情况记录到数据库中。过去几周我一直在使用 OpenCV,并且数字检测工作正常。(最后一个数字会带来问题,因为它会无休止地旋转,而不是像前 5 个那样与数字对齐,因此完整数字的显示时间不到一半。)

无论如何,为了获得最佳分辨率,我想跟踪实际的大红色针。现在我要绕一圈找到“最红”的像素,并用它来计算针的角度。只要光线充足并且相机不移动,它就可以工作。

我猜我可以用 Canny 边缘检测来实现一个技巧......最终我只是想找到最长线的角度?针的颜色独特,应该有助于消除很多误报,但我如何实际应用过滤器呢?

(请注意,仪表左下角有一个红色的小旋转器,与指针的颜色相同。我需要确保它不会误触发某些东西。)

谢谢你!-亚当水表示例

c++ opencv computer-vision

0
推荐指数
1
解决办法
3518
查看次数