码迷,mamicode.com
首页 > 其他好文 > 详细

学习OpenCV3(一)

时间:2020-10-12 20:46:37      阅读:35      评论:0      收藏:0      [点我收藏+]

标签: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保存的。
View Code

之后想起来 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)
View Code

 

学习OpenCV3(一)

标签:python   测试   name   img   empty   接口调用   color   高斯   tput   

原文地址:https://www.cnblogs.com/alexxql/p/13804460.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!