python - 如何修复 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
解决方案
删除 opencv 4.53.x 版本并安装 4.5.1.x 版本解决了这个问题。也由于某种原因不得不更改文件位置。
推荐阅读
- php - 如何像用户单击一样单击 HTML 按钮
- javascript - React 原生子组件没有从父状态获取 componentWillReceiveProps
- javascript - 如何在 JavaScript 中使用矩库进行日期验证?
- asp.net-core - 带有 ASP.NET Core 3.1 和 axios 的 API 进度条
- memory - Power BI (DAX) 中按库存销售额排名前 5 位的产品总和
- java - 如何使 ImageView 居中?
- spring-boot - 使用 jmeter 完成负载测试时,Tomcat 对请求的意外最大响应时间
- pygame - 我在 pygame 中上传图像时遇到问题
- java - 手机震动时执行动作
- java - Mockito 在 Java 语言中的使用?