首页 > 解决方案 > 如何修复 pycharm 中的 get trackbar 位置错误?

问题描述

我正在使用pycharm在win10上运行opencv课程我复制了免费站点中提供的代码,但似乎python版本的代码太旧了。运行代码时出现以下错误:

回溯(最后一次调用):文件“C:\Users\User\PycharmProjects\OpemcvPython\testZone.py”,第 56 行,在 h_min = cv2.getTrackbarPos("Hue Min","TrackBars") cv2.error: OpenCV (4.5.3) C:\Users\runneradmin\AppData\Local\Temp\pip-req-build-1i5nllza\opencv\modules\highgui\src\window_w32.cpp:2577:错误:(-27:空指针)NULL窗口:函数“cvGetTrackbarPos”中的“TrackBars”

我没有使用 sudu 命令的选项,我可以更改 opencv 包的唯一方法是通过 pycharm 设置代码:

import numpy as np
path = 'C:/Users/User/OneDrive - Bio Milk Ltd/Desktop/DAPI.png'
def empty(a):
    pass


def stackImages(scale, imgArray):
    rows = len(imgArray)
    cols = len(imgArray[0])
    rowsAvailable = isinstance(imgArray[0], list)
    width = imgArray[0][0].shape[1]
    height = imgArray[0][0].shape[0]
    if rowsAvailable:
        for x in range(0, rows):
            for y in range(0, cols):
                if imgArray[x][y].shape[:2] == imgArray[0][0].shape[:2]:
                    imgArray[x][y] = cv2.resize(imgArray[x][y], (0, 0), None, scale, scale)
                else:
                    imgArray[x][y] = cv2.resize(imgArray[x][y], (imgArray[0][0].shape[1], imgArray[0][0].shape[0]),
                                                None, scale, scale)
                if len(imgArray[x][y].shape) == 2: imgArray[x][y] = cv2.cvtColor(imgArray[x][y], cv2.COLOR_GRAY2BGR)
        imageBlank = np.zeros((height, width, 3), np.uint8)
        hor = [imageBlank] * rows
        hor_con = [imageBlank] * rows
        for x in range(0, rows):
            hor[x] = np.hstack(imgArray[x])
        ver = np.vstack(hor)
    else:
        for x in range(0, rows):
            if imgArray[x].shape[:2] == imgArray[0].shape[:2]:
                imgArray[x] = cv2.resize(imgArray[x], (0, 0), None, scale, scale)
            else:
                imgArray[x] = cv2.resize(imgArray[x], (imgArray[0].shape[1], imgArray[0].shape[0]), None, scale, scale)
            if len(imgArray[x].shape) == 2: imgArray[x] = cv2.cvtColor(imgArray[x], cv2.COLOR_GRAY2BGR)
        hor = np.hstack(imgArray)
        ver = hor
    return ver

cv2.namedWindow("TrackBars")
cv2.resizeWindow("TrackBars", 640, 240)
cv2.createTrackbar("Hue Min","TrackBars", 0, 179, empty)
cv2.createTrackbar("Hue Max","TrackBars", 19, 179, empty)
cv2.createTrackbar("Sat Min","TrackBars", 110, 255, empty)
cv2.createTrackbar("Sat Max","TrackBars", 240, 255, empty)
cv2.createTrackbar("Val Min","TrackBars", 153, 255, empty)
cv2.createTrackbar("Val Max","TrackBars", 255, 255, empty)

imgOriginal = cv2.imread(path)
width, hight = 600, 600
dsize = (width, hight)

while True:
    img = cv2.resize(imgOriginal, dsize)
    imgHSV = cv2.cvtColor(img,cv2.COLOR_BGR2HSV)
    h_min = cv2.getTrackbarPos("Hue Min","TrackBars")
    h_max = cv2.getTrackbarPos("Hue Max","TrackBars")
    s_min = cv2.getTrackbarPos("Sat Min","TrackBars")
    s_max = cv2.getTrackbarPos("Sat Max","TrackBars")
    v_min = cv2.getTrackbarPos("Val Min","TrackBars")
    v_max = cv2.getTrackbarPos("Val Max","TrackBars")
    print(h_min, h_max, s_min, s_max, v_min, v_max)
    lower = np.array([h_min,s_min,v_min])
    upper = np.array([h_max,s_max,v_max])
    mask = cv2.inRange(imgHSV, lower, upper)
    imgResult = cv2.bitwise_and(img, img, mask=mask)
 #   cv2.imshow("Result", imgResult)
    imgStack = stackImages(0.6,([img,imgHSV],[mask,imgResult]))
    cv2.imshow("Stacked Images", imgStack)
    cv2.waitKey(1) ```
Thanks for your help

标签: python

解决方案


删除 opencv 4.53.x 版本并安装 4.5.1.x 版本解决了这个问题。也由于某种原因不得不更改文件位置。


推荐阅读