Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/image-processing/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 2.7 python opencv HSV测距仪创建轨迹栏_Python 2.7_Image Processing_Opencv3.0_Hsv - Fatal编程技术网

Python 2.7 python opencv HSV测距仪创建轨迹栏

Python 2.7 python opencv HSV测距仪创建轨迹栏,python-2.7,image-processing,opencv3.0,hsv,Python 2.7,Image Processing,Opencv3.0,Hsv,我想用opencv和python找到激光点的HSV值。我从这里得到代码,但它是C++的,安装VisualStudio和OpenCV需要时间,所以我在Python 中更改了代码 import cv2 import numpy as np def callback(x): pass cap = cv2.VideoCapture(0) cv2.namedWindow('image') ilowH = 0 ihighH = 179 ilowS = 0 ihighS = 255 ilowV = 0

我想用opencv和python找到激光点的HSV值。我从这里得到代码,但它是C++的,安装VisualStudio和OpenCV需要时间,所以我在Python

中更改了代码
import cv2
import numpy as np

def callback(x):
pass

cap = cv2.VideoCapture(0)
cv2.namedWindow('image')

ilowH = 0
ihighH = 179

ilowS = 0
ihighS = 255
ilowV = 0
ihighV = 255

# create trackbars for color change
cv2.createTrackbar('lowH','image',ilowH,179,callback)
cv2.createTrackbar('highH','image',ihighH,179,callback)

cv2.createTrackbar('lowS','image',ilowS,255,callback)
cv2.createTrackbar('highS','image',ihighS,255,callback)

cv2.createTrackbar('lowV','image',ilowV,255,callback)
cv2.createTrackbar('highV','image',ihighV,255,callback)



while(1):
 ret, frame = cap.read()
 hsv = cv2.cvtColor(frame, cv2.COLOR_BGR2HSV)
 cv2.imshow('hsv', hsv)
 lower_hsv = np.array([ilowH, ilowS, ilowV])
 higher_hsv = np.array([ihighH, ihighS, ihighV])
 mask = cv2.inRange(hsv, lower_hsv, higher_hsv)
 cv2.imshow('mask', mask)
 cv2.imshow('frame', frame)
 print ilowH, ilowS, ilowV
 if(cv2.waitKey(1) & 0xFF == ord('q')):
    break


cv2.destroyAllWindows()
cap.release()
但这段代码没有设置任何阈值。我创建的轨迹栏似乎没有改变ilowH、ilowS、ilowV的值。我通过在while循环中打印这些值来检查它。不设置这些值的阈值会有什么问题,或者python中是否有更好的代码来查找激光器的HSV值。
谢谢,非常感谢您的帮助。

您可以使用
cv2.getTrackbarPos()
获取轨迹栏值。还要注意的是,有时它会使轨迹栏混乱,这很烦人,但至少它们被贴上了标签

然而,我不认为这些轨迹栏会很好地用于视频直播。有很多冻结问题。你必须有一个超低的帧速率(如果你真的想显示它,我可以使用
cv2.waitKey(500)
)。这主要是由于轨迹杆吸吮,而不是阈值操作,阈值操作没有那么慢

创建命名窗口后,需要添加轨迹栏。然后,对于while循环,请尝试:

while True:
    # grab the frame
    ret, frame = cap.read()

    # get trackbar positions
    ilowH = cv2.getTrackbarPos('lowH', 'image')
    ihighH = cv2.getTrackbarPos('highH', 'image')
    ilowS = cv2.getTrackbarPos('lowS', 'image')
    ihighS = cv2.getTrackbarPos('highS', 'image')
    ilowV = cv2.getTrackbarPos('lowV', 'image')
    ihighV = cv2.getTrackbarPos('highV', 'image')

    hsv = cv2.cvtColor(frame, cv2.COLOR_BGR2HSV)
    lower_hsv = np.array([ilowH, ilowS, ilowV])
    higher_hsv = np.array([ihighH, ihighS, ihighV])
    mask = cv2.inRange(hsv, lower_hsv, higher_hsv)

    frame = cv2.bitwise_and(frame, frame, mask=mask)

    # show thresholded image
    cv2.imshow('image', frame)
    k = cv2.waitKey(1000) & 0xFF # large wait time to remove freezing
    if k == 113 or k == 27:
        break
最后以
cv2.destroyAllWindows()结束文件

另外,HSV的最大H值是180,而不是179

无耻的插件:我碰巧刚刚完成一个项目,正是这样做的,但在图片上。你可以在GitHub上获取它。有一个例子;尝试运行它,然后根据需要进行修改。它将允许您在每个不同的颜色空间内更改颜色空间和阈值,并将打印结束时的最终阈值。此外,它还将返回操作的输出图像供您使用。希望它对你有用!您可以通过GitHub为项目发送任何问题或建议

以下是it运行的一个示例:

作为输出,它为您提供:

Colorspace: HSV 
Lower bound: [68.4, 0.0, 0.0] 
Upper bound: [180.0, 255.0, 255.0]

以及二进制图像。我目前也在努力将其应用到web应用程序中,但这可能需要几天才能完成。

您可以使用
cv2.getTrackbarPos()获取轨迹栏值。
。还要注意的是,有时它会使轨迹栏混乱,这很烦人,但至少它们被贴上了标签

然而,我不认为这些轨迹栏会很好地用于视频直播。有很多冻结问题。你必须有一个超低的帧速率(如果你真的想显示它,我可以使用
cv2.waitKey(500)
)。这主要是由于轨迹杆吸吮,而不是阈值操作,阈值操作没有那么慢

创建命名窗口后,需要添加轨迹栏。然后,对于while循环,请尝试:

while True:
    # grab the frame
    ret, frame = cap.read()

    # get trackbar positions
    ilowH = cv2.getTrackbarPos('lowH', 'image')
    ihighH = cv2.getTrackbarPos('highH', 'image')
    ilowS = cv2.getTrackbarPos('lowS', 'image')
    ihighS = cv2.getTrackbarPos('highS', 'image')
    ilowV = cv2.getTrackbarPos('lowV', 'image')
    ihighV = cv2.getTrackbarPos('highV', 'image')

    hsv = cv2.cvtColor(frame, cv2.COLOR_BGR2HSV)
    lower_hsv = np.array([ilowH, ilowS, ilowV])
    higher_hsv = np.array([ihighH, ihighS, ihighV])
    mask = cv2.inRange(hsv, lower_hsv, higher_hsv)

    frame = cv2.bitwise_and(frame, frame, mask=mask)

    # show thresholded image
    cv2.imshow('image', frame)
    k = cv2.waitKey(1000) & 0xFF # large wait time to remove freezing
    if k == 113 or k == 27:
        break
最后以
cv2.destroyAllWindows()结束文件

另外,HSV的最大H值是180,而不是179

无耻的插件:我碰巧刚刚完成一个项目,正是这样做的,但在图片上。你可以在GitHub上获取它。有一个例子;尝试运行它,然后根据需要进行修改。它将允许您在每个不同的颜色空间内更改颜色空间和阈值,并将打印结束时的最终阈值。此外,它还将返回操作的输出图像供您使用。希望它对你有用!您可以通过GitHub为项目发送任何问题或建议

以下是it运行的一个示例:

作为输出,它为您提供:

Colorspace: HSV 
Lower bound: [68.4, 0.0, 0.0] 
Upper bound: [180.0, 255.0, 255.0]

以及二进制图像。我目前也在努力将其应用到web应用程序中,但这可能需要几天时间才能完成。

使用此代码查找实时视频的屏蔽范围!这可能会节省你的时间。下面是完整的代码,请检查并运行它进行测试

import cv2
import numpy as np

camera = cv2.VideoCapture(0)

def nothing(x):
    pass

cv2.namedWindow('marking')

cv2.createTrackbar('H Lower','marking',0,179,nothing)
cv2.createTrackbar('H Higher','marking',179,179,nothing)
cv2.createTrackbar('S Lower','marking',0,255,nothing)
cv2.createTrackbar('S Higher','marking',255,255,nothing)
cv2.createTrackbar('V Lower','marking',0,255,nothing)
cv2.createTrackbar('V Higher','marking',255,255,nothing)


while(1):
    _,img = camera.read()
    img = cv2.flip(img,1)

    hsv = cv2.cvtColor(img, cv2.COLOR_BGR2HSV)

    hL = cv2.getTrackbarPos('H Lower','marking')
    hH = cv2.getTrackbarPos('H Higher','marking')
    sL = cv2.getTrackbarPos('S Lower','marking')
    sH = cv2.getTrackbarPos('S Higher','marking')
    vL = cv2.getTrackbarPos('V Lower','marking')
    vH = cv2.getTrackbarPos('V Higher','marking')

    LowerRegion = np.array([hL,sL,vL],np.uint8)
    upperRegion = np.array([hH,sH,vH],np.uint8)

    redObject = cv2.inRange(hsv,LowerRegion,upperRegion)

    kernal = np.ones((1,1),"uint8")

    red = cv2.morphologyEx(redObject,cv2.MORPH_OPEN,kernal)
    red = cv2.dilate(red,kernal,iterations=1)

    res1=cv2.bitwise_and(img, img, mask = red)


    cv2.imshow("Masking ",res1)

    if cv2.waitKey(10) & 0xFF == ord('q'):
        camera.release()
        cv2.destroyAllWindows()
        break`
谢谢!
拥抱..

使用此代码查找实时视频的遮罩范围!这可能会节省你的时间。下面是完整的代码,请检查并运行它进行测试

import cv2
import numpy as np

camera = cv2.VideoCapture(0)

def nothing(x):
    pass

cv2.namedWindow('marking')

cv2.createTrackbar('H Lower','marking',0,179,nothing)
cv2.createTrackbar('H Higher','marking',179,179,nothing)
cv2.createTrackbar('S Lower','marking',0,255,nothing)
cv2.createTrackbar('S Higher','marking',255,255,nothing)
cv2.createTrackbar('V Lower','marking',0,255,nothing)
cv2.createTrackbar('V Higher','marking',255,255,nothing)


while(1):
    _,img = camera.read()
    img = cv2.flip(img,1)

    hsv = cv2.cvtColor(img, cv2.COLOR_BGR2HSV)

    hL = cv2.getTrackbarPos('H Lower','marking')
    hH = cv2.getTrackbarPos('H Higher','marking')
    sL = cv2.getTrackbarPos('S Lower','marking')
    sH = cv2.getTrackbarPos('S Higher','marking')
    vL = cv2.getTrackbarPos('V Lower','marking')
    vH = cv2.getTrackbarPos('V Higher','marking')

    LowerRegion = np.array([hL,sL,vL],np.uint8)
    upperRegion = np.array([hH,sH,vH],np.uint8)

    redObject = cv2.inRange(hsv,LowerRegion,upperRegion)

    kernal = np.ones((1,1),"uint8")

    red = cv2.morphologyEx(redObject,cv2.MORPH_OPEN,kernal)
    red = cv2.dilate(red,kernal,iterations=1)

    res1=cv2.bitwise_and(img, img, mask = red)


    cv2.imshow("Masking ",res1)

    if cv2.waitKey(10) & 0xFF == ord('q'):
        camera.release()
        cv2.destroyAllWindows()
        break`
谢谢!
拥抱..

实际上,我目前正在推动对GitHub的回购,这正是您正试图用Python实现的事情,包括轨迹栏和所有内容。当我把它放好后,我会给你链接——不应该超过15分钟。我想我的意思是15秒:我实际上正在推动一个对GitHub的回购,用Python实现你正试图做的事情,包括轨迹栏和所有东西。当我把它贴好的时候,我会给你链接的——不应该超过15分钟。我想我的意思是15秒:非常感谢,先生,它成功了。如果我再次遇到麻烦,希望你能进一步帮助我。如果类似的事情再次发生的话。非常感谢,先生,它奏效了。如果像这样的事情再次发生在
色调
范围在
180
度范围内,而不是
255
@Bilal一个圆有360度,但我们取255度,希望你能进一步帮助我!请看这个谢谢你的建议!我已经更新了我的代码注释,
Hue
范围在
180
度范围内,而不是
255
@Bilal一个圆有360度,但我们取255度!请看这个谢谢你的建议!我已经更新了我的代码