python - 仅在 Python 的 OpenCV 轨迹栏上有奇数?

标签 python opencv

我正在学习如何在 Python 上使用 OpenCV 进行皮肤分割,现在我主要处于实验阶段,我正在使用高斯蓝来减少我在 Otsu 的二值化中得到的鲜明对比。

我发现在我的实验中非常有用的一个策略是使用显示窗口上的跟踪栏功能来更改各种参数,例如内核大小的选择和高斯函数的标准偏差。当我更改 std 时,轨迹栏工作得很好,但当我对内核大小执行相同操作时,我的程序崩溃了。

这样做的原因是内核大小只采用大于 1 的奇数作为两个值的元组。由于轨迹条是连续的,当我移动它并且轨迹条读取偶数时,高斯函数会抛出错误。

我希望您能为我提供一个解决方案,以创建仅包含数组中的奇数或偶数的轨迹栏(如果可能)。谢谢!

# applying otsu binerization to video stream
feed = cv2.VideoCapture(0)

# create trackbars to control the amount of blur 
cv2.namedWindow('blur')
# callback function for trackbar
def blur_callback(trackbarPos):
    pass
# create the trackbar 
cv2.createTrackbar('Blur Value', 'blur', 1, 300, blur_callback)
# cv2.createTrackbar('Kernel Size', 'blur', 3, 51, blur_callback)

while True:
    vid_ret, frame = feed.read()
    # flip the frames 
    frame = cv2.flip(frame, flipCode=1)

    # convert the feed to grayscale
    frame_gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)

    # get blur value from trackbar and apply gaussian blur to frame_gray
    blurVal = cv2.getTrackbarPos('Blur Value', 'blur')
#     kernelSize = cv2.getTrackbarPos('Kernel Size', 'blur')
    frame_blur = cv2.GaussianBlur(frame_gray, (11, 11), blurVal)

    # apply Otsu binerization on vanilla grayscale
    otsu_ret, otsu = cv2.threshold(frame_gray, 0, 255, cv2.THRESH_OTSU)

    # apply Otsu binerization on blurred grayscale
    otsu_blue_ret, otsu_blur = cv2.threshold(frame_blur, 0, 255, cv2.THRESH_OTSU)


    # show the differnt images
    cv2.imshow('color', frame)
#     cv2.imshow('gray', frame_gray)
    cv2.imshow('blur', frame_blur)
    cv2.imshow('otsu', otsu)
    cv2.imshow('otsu_blur', otsu_blur)
    # exit key
    if cv2.waitKey(10) & 0xFF == ord('q'):
        break

# release the feed and close all windows
feed.release()
cv2.destroyAllWindows()

最佳答案

要添加到 Louis 的答案中,您可以使用 setTrackbarPos() 将轨迹栏移动到奇数位置

参见:https://docs.opencv.org/trunk/d7/dfc/group__highgui.html#ga67d73c4c9430f13481fd58410d01bd8d

关于python - 仅在 Python 的 OpenCV 轨迹栏上有奇数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54055124/

相关文章:

python - request.adapters.HTTPAdapter中的pool_connections是什么意思?

python - 循环获取二维三角形中的点

matlab - 使用 OpenCV 的相机校准结果使用 matlab 显示相机方向

python - Django 中的 CSS 表格样式未显示表格设计

python - 按组计数并分配给新变量

python - alchemyapi-recipes-twitter - 无法正常工作

android - 用于 ANDROID 图像比较的 OpenCV

opencv - OpenCL:为什么不能将指向指针的指针作为参数传递给内核函数?

opencv - 视频文件打不开?(opencv 3.1.0 windows)

python - 在 tensorflow 中使用 gabor 过滤器,或任何其他过滤器而不是默认过滤器