标签:python 测试 name img empty 接口调用 color 高斯 tput
最近要做和计算机视觉相关的项目,就开始学习OpenCV了。买了《学习OpenCV3》这本书,发现是用C++编写的例程,就开始配置C++的环境。
配了一整天visual studio 2019,失败,感觉原因一是自己确实不熟悉C++的dll和lib那一块,对x64和x86也不熟悉,所以配置都得照着网上的说法弄,神奇的是,网上一个网页一个说法,虽然都达成了最终目的,但总感觉不够正规和简洁。一怒之下还是在Anaconda上装了OpenCV-Python。之前有做过C++和Python上OpenCV的区别调查,发现其实接口调用都差不多,执行效率也相差无几(特别提到了numba)所以干脆就用Python了。
但在跟着书上C++的例程写Python时还是遇到了一些问题,特此记录。
第一个与遇到的比较重要的区别实在示例2-5里,原文C++代码为
cv::Mat out cv::GaussianBlur( image, out, cv::Size(5, 5), 3, 3);
遇到第一个问题是 out 这个变量,一开始我以为 out 放到Python里应该变成
out = np.mat()
# 插曲:说到numpy,也是我之前发现,例程里的img.empty()没法用,因为Python里没有empty()这个函数,然后想到之前说到的numba可以优化Python的OpenCV所以想到Py-CV里的图片文件可能使用numpy的matrix保存的。
之后想起来 np.mat() 应该传入参数,但怎么可能预先知道读取的图片大小,于是改用了
out = None
然后把高斯模糊部分的代码改为
cv.GaussianBlur(image, out, (5, 5), 3, 3)
然后发现报错,要求输入tunple类型。根据我写Python的经验和读cv.GaussianBlur的参数,反应过来应该写成
out = cv.GaussianBlur(image, (5, 5), 3, 3)
之后就跑通了,测试文件用的就是著名的512*512的Lenna
贴上example2_5的python对应代码
import cv2 as cv import numpy as np def example2_5(image): # Create windows to show input and output cv.namedWindow("Example2_5-in", cv.WINDOW_AUTOSIZE) cv.namedWindow("Example2_5-out", cv.WINDOW_AUTOSIZE) # Create a window to show input image cv.imshow("Example2_5-in", image) out = cv.GaussianBlur(image, (5, 5), 3, 3) out = cv.GaussianBlur( out, (5, 5), 3, 3) # Show the smoothed image cv.imshow("Example2_5-out", out) cv.waitKey(0) if __name__ == ‘__main__‘: img = cv.imread("lenna.png") example2_5(img)
标签:python 测试 name img empty 接口调用 color 高斯 tput
原文地址:https://www.cnblogs.com/alexxql/p/13804460.html