python+opencv在windows下可以运行移植到Ubuntu下为什么部分代码出现错误呢

本文描述了在Ubuntu系统中使用OpenCV进行光斑质心提取时遇到的错误,具体表现为在调用contourArea()函数时触发断言失败。问题源于OpenCV版本3.4.2,在处理图像轮廓面积计算时出现错误,尽管程序在Windows环境下运行正常。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在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)```

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值