在windows下进行光斑质心提取,程序和效果都没任何问题,将程序移植到Ubuntu下 各种环境变量配置没有问题 可以打开相机,但是图像处理总出现错误 但是程序没有崩掉, 想请问有没有知道原因得?
下面是报的错误
Traceback (most recent call last):
File “/mnt/hgfs/UbuntuShare/ThreadBasler/ThreadMain.py”, line 192, in run
OpencvPict.threshold()
File “/mnt/hgfs/UbuntuShare/ThreadBasler/OpencvPict.py”, line 30, in threshold
area = cv2.contourArea(contours[i])
cv2.error: OpenCV(3.4.2) /io/opencv/modules/imgproc/src/shapedescr.cpp:272: error: (-215:Assertion failed) npoints >= 0 && (depth == 5 || depth == 4) in function ‘contourArea’
gray = cv2.cvtColor(Global.camera0.imgcamera0, cv2.COLOR_RGB2GRAY) # 把输入图像灰度化
ret, binary = cv2.threshold(gray, 100, 255, cv2.THRESH_TOZERO)
blurred = cv2.GaussianBlur(binary, (3, 3), 0)
blur = cv2.blur(blurred, (3, 3))
canny = cv2.Canny(blur, 3, 3 * 3, 3) #hierarchy
contours = cv2.findContours(canny, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE) # 输出为三个参数
Global.camera0.counter = len(contours)
if len(contours) > 0:
Global.camera0.centerarea = 0.0
contours_index = 0
for i in range(len(contours)):
area = cv2.contourArea(contours[i])
if area > Global.camera0.centerarea :
Global.camera0.centerarea = area
contours_index = i
if Global.camera0.centerarea == 0 :
print('wuguangban ')
else:
if Global.camera0.centerarea < 5 :
print('guangbantaixiao')
x, y, w, h = cv2.boundingRect(contours[contours_index])
M = cv2.moments(contours[contours_index])
cx = (M['m10'] / M['m00'])
cy = (M['m01'] / M['m00'])
xx = 0.0
yy = 0.0
all = 0.0
Global.camera0.centerx = 0.0
Global.camera0.centery = 0.0
Global.camera0.centerarea = 0.0
for i in range(w):
for j in range(h) :
if cv2.pointPolygonTest(contours[contours_index], (x + i, y + j), True) >= 0:
all += binary[y + j, x + i]
xx += i * binary[y + j, x + i]
yy += j * binary[y + j, x + i]
Global.camera0.centerarea = Global.camera0.centerarea + 1
if all != 0:
Global.camera0.centerx = xx / all + x
Global.camera0.centery = yy / all + y
print(Global.camera0.centerx)
print(Global.camera0.centery)
print(Global.camera0.centerarea)
print(Global.camera0.counter)
cv2.namedWindow("binary0", cv2.WINDOW_NORMAL)
cv2.imshow("binary0", binary)
cv2.waitKey(1)```