关于OpenCV版本问题带来的两个小错误

本文针对使用OpenCV4.0时遇到的cv2.morphologyEx和cv2.findContours函数错误进行了分析与修正,包括调整内核类型及处理函数返回值变化等问题。

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

写写代码,跑跑程序,出现两个小错误,解决之。

(1)cv2.morphologyEx

mask=cv2.morphologyEx(mask,cv2.MORPH_CLOSE,kernalC1)
TypeError: Expected cv::UMat for argument 'kernel'

(2)cv2.findContours

_,countours0,hierarchy=cv2.findContours(mask,cv2.RETR_EXTERNAL,cv2.CHAIN_APPROX_NONE)
ValueError: not enough values to unpack (expected 3, got 2)

两个小错误,查了下OpenCV版本为4.0.0

import cv2
print(cv2.__version__)
4.0.0

查看OpenCV4.0.0documents

https://docs.opencv.org/4.0.0-rc/d4/d73/tutorial_py_contours_begin.html

代码为:

import numpy as np
import cv2 as cv
im = cv.imread('test.jpg')
imgray = cv.cvtColor(im, cv.COLOR_BGR2GRAY)
ret, thresh = cv.threshold(imgray, 127, 255, 0)
contours, hierarchy = cv.findContours(thresh, cv.RETR_TREE, cv.CHAIN_APPROX_SIMPLE)

修改网页上方版本为3.2,自动跳转到3.2的documents

https://docs.opencv.org/3.2.0/d4/d73/tutorial_py_contours_begin.html

代码为

import numpy as np
import cv2
im = cv2.imread('test.jpg')
imgray = cv2.cvtColor(im,cv2.COLOR_BGR2GRAY)
ret,thresh = cv2.threshold(imgray,127,255,0)
im2, contours, hierarchy = cv2.findContours(thresh,cv2.RETR_TREE,cv2.CHAIN_APPROX_SIMPLE)

 

同样查找cv2.morphologyEx

https://docs.opencv.org/4.0.0-rc/d9/d61/tutorial_py_morphological_ops.html

代码为

import cv2 as cv
import numpy as np
img = cv.imread('j.png',0)
kernel = np.ones((5,5),np.uint8)
erosion = cv.erode(img,kernel,iterations = 1)
closing = cv.morphologyEx(img, cv.MORPH_CLOSE, kernel)

kernel类型为应该np.unit8。其他版本同上。

 

应该是版本问题,内置函数参数和返回值有修改,修改kernalC1类型,cv2.findContours和返回值,如下

(1)kernalC1类型

kernalCl = np.ones((11,11),np.uint)

改为

kernalCl = np.ones((11,11),np.uint8)

(2)cv2.findContours返回值

_,countours0,hierarchy=cv2.findContours(mask,cv2.RETR_EXTERNAL,cv2.CHAIN_APPROX_NONE)

改为

countours0,hierarchy=cv2.findContours(mask,cv2.RETR_EXTERNAL,cv2.CHAIN_APPROX_NONE)

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值