今天费了点时间将opencv从2.4.11升级到了3.0.0,简单记下升级后对python代码的差异。
在2.4.11中,我们获取码率等参数是这样的:
#获得码率及尺寸 fps = videoCapture.get(cv2.cv.CV_CAP_PROP_FPS) size = (int(videoCapture.get(cv2.cv.CV_CAP_PROP_FRAME_WIDTH)),
但到了3.0.0,已经没有cv2.cv了,相应的代码也就成了:
#获得码率及尺寸 fps = videoCapture.get(cv2.CAP_PROP_FPS) size = (int(videoCapture.get(cv2.CAP_PROP_FRAME_WIDTH)), int(videoCapture.get(cv2.CAP_PROP_FRAME_HEIGHT)))
在2.4.11中,执行findContours是这样的:
# 获取轮廓,我们的目的是分块,因此只使用外层轮廓,使用点序列的形式 bin_img_save = np.copy(bin_img) (contoures, hierarchy) = cv2.findContours(bin_img_save, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_NONE)
但在3.0.0下却有问题:
观察此函数的导出接口:
if( PyArg_ParseTupleAndKeywords(args, kw, "Oii|OOO:findContours", (char**)keywords, &pyobj_image, &mode, &method, &pyobj_contours, &pyobj_hierarchy, &pyobj_offset) && pyopencv_to(pyobj_image, image, ArgInfo("image", 1)) && pyopencv_to(pyobj_contours, contours, ArgInfo("contours", 1)) && pyopencv_to(pyobj_hierarchy, hierarchy, ArgInfo("hierarchy", 1)) && pyopencv_to(pyobj_offset, offset, ArgInfo("offset", 0)) ) { ERRWRAP2(cv::findContours(image, contours, hierarchy, mode, method, offset)); return Py_BuildValue("(NNN)", pyopencv_from(image), pyopencv_from(contours), pyopencv_from(hierarchy)); }
可以发现它返回了三个值,因此这个接口的调用就变成了:
# 获取轮廓,我们的目的是分块,因此只使用外层轮廓,使用点序列的形式 bin_img_save = np.copy(bin_img) (new_img, contoures, hierarchy) = cv2.findContours(bin_img_save, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_NONE)
在2.4.11中有一个叫legacy的动态库,但是3.0.0中已经没有此库了,因此有一部分功能只能另想它法了。
暂且就只发现这么多,继续。
原文地址:http://blog.csdn.net/lights_joy/article/details/46434493