【发布时间】:2018-07-01 06:08:30
【问题描述】:
我想使用 opencv 进行前景分割。我编写了带有跟踪栏的代码,以便我可以找到分割的最佳参数。当代码执行时,它会显示带有标记的轮廓等的图像。但是当我尝试在轨迹栏上移动栏时。我收到以下错误。
OpenCV(3.4.1) Error: Assertion failed (size.width>0 && size.height>0) in imshow, file /feedstock_root/build_artefacts/opencv_1523502125490/work/opencv-3.4.1/modules/highgui/src/window.cpp, line 356
Traceback (most recent call last):
File "forgroundsegmentation.py", line 17, in foreground_segment
cv2.imshow('brightness preprocess', tmp)
这是我的代码。
import cv2
import numpy as np
winName = "ForeGround Segment"
def foreground_segment(src, a=None,b=None, useEqualize=1, blurSize=21, th1=None, brightness=None):
winName = "ForeGround Segment"
tmp = brightness
if (blurSize >= 3):
blurSize += (1 - blurSize % 2)
tmp = cv2.GaussianBlur(tmp, (blurSize, blurSize), 0)
if (useEqualize):
tmp = cv2.equalizeHist(tmp)
cv2.imshow('brightness preprocess', tmp)
#cv2.imwrite('../BrightnessPreprocess.png', tmp)
ret, tmp = cv2.threshold(tmp, th1, 255, cv2.THRESH_BINARY_INV)
cv2.imshow(winName, tmp)
im2, contours, hierarchy = cv2.findContours(tmp, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)
dst = src
#print(contours)
maxDim = 0
largest = -1
for i in range(len(contours)):
cv2.drawContours(dst, contours, largest, (0, 0, 255), 1)
dim = len(contours[i])
if (dim > maxDim):
maxDim = dim
largest = i
img_mask = np.zeros(src.shape, np.uint8)
if (largest >= 0):
theImg = contours[largest]
cv2.polylines(dst, theImg, True, (0, 255,0), 2)
cv2.drawContours(img_mask, contours, largest, 255, -1)
cv2.imshow("Result Mask", img_mask)
cv2.imshow("Result Contour", dst)
#cv2.imwrite("../img_mask.png", img_mask)
#cv2.imwrite("../result.png", dst)
if __name__ == '__main__':
src = cv2.imread('frontal.png')
print(src.shape)
src = cv2.resize(src, (int(src.shape[0]/3), int(src.shape[1]/3)), interpolation = cv2.INTER_AREA)
#src = cv2.resize(src, (500, 500), interpolation = cv2.INTER_AREA)
cv2.imshow(winName, src)
dst = cv2.cvtColor(src, cv2.COLOR_BGR2HSV)
hsv_planes = cv2.split(dst)
brightness = hsv_planes[2]
useEqualize = 1
blurSize = 21
th1 = int(33.0 * 255 / 100)
cv2.createTrackbar("Equalize", winName, useEqualize, 1, foreground_segment)
cv2.createTrackbar("Blur Sigma", winName, blurSize, 100, foreground_segment)
cv2.createTrackbar("Threshold", winName, th1, 255, foreground_segment)
foreground_segment(src ,0, 0, useEqualize, blurSize, th1, brightness=brightness)
cv2.waitKey(0)
cv2.destroyAllWindows
我认为我做的一切都是正确的。有人可以指出我哪里出错了。
【问题讨论】:
-
您需要使用
cv2.getTrackbarPos()来查看移动滑块时的变化!
标签: python opencv cv2 trackbar