当前位置:   article > 正文

上位机图像处理和嵌入式模块部署(python & opencv)_嵌入式系统用python做图像处理

嵌入式系统用python做图像处理

【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing @163.com】

        前面我们谈到了qt,谈到了opencv,也谈到了嵌入式,但是没有说明python在这个过程当中应该扮演什么样的角色。opencv从开发的角度来说,可以是配合python做算法验证,十分简洁、方便,毕竟python不需要自己来编译。从上位机的角度说,opencv还可以做成上位机工具,给fae使用。当然,它做到嵌入式模块里面也是可以的,这样的话,opencv就会被编译成arm代码,结合上位机工具一起去部署就可以了。所以,哪怕就是相同的opencv库,用法不同,场景不同,发挥的作用也是不一样的。

1、安装python软件

        python本身是一门脚本语言,建议大家可以安装一个较新的版本,比如说python3。

2、安装opencv包

        网上很多的教程,都是推荐大家直接用pip install去安装,其实这样安装的效率是很低的。建议大家在安装好python3之后,cd到Scripts目录下,利用pip和douban的软件源来安装opencv,这样效率要高很多。比如说,像这样,

pip3.exe install opencv-python -i http://pypi.douban.com/simple --trusted-host pypi.douban.com

3、确认opencv已经安装好

        要想确认cv2已经安装好,只需要在python3目录下打开python,输入下面这个语句,如果没有报错的话,那就一切正常了,

import cv2

4、第一个python脚本的图像处理程序

        安装好了opencv之后,就可以写图像处理程序了。最简单的一个脚本,肯定就是显示一幅lena.png的图片了。我们可以打开一个编辑器,接下来就是输入下面这些脚本即可,

  1. import cv2
  2. '''
  3. main entry
  4. '''
  5. def main():
  6. picture = cv2.imread('./lena.bmp')
  7. cv2.imshow('lena', picture)
  8. cv2.waitKey(0)
  9. cv2.destroyAllWindows()
  10. if __name__ == '__main__':
  11. main()

5、执行脚本

        假设编写的脚本没有问题,我们就可以用python工具直接运行它就ok了。脚本的文件名如果是demo.py,那么可以这么来进行执行脚本,

C:\Python39\python.exe demo.py

        确认一下图片是否可以正常显示,能正常显示,那就代表问题不大了。

6、第一次用python实现灰化算法

        前面我们虽然显示了lena.png,但是没有自己用python写一个算法,算是一个小小的遗憾。这里,我们其实也可以通过python脚本,自己来实现一个灰化算法,这也是不错的一个选择。很多时候,对于一些成熟的算法,并不是我们自己不会写,而是说使用opencv更加方便一点,仅此而已。因为这样在出现问题的时候,才会知道怎么去调整和debug脚本,

  1. import cv2
  2. import numpy as np
  3. '''
  4. use average value
  5. '''
  6. def generate_gray_data(picture):
  7. for i in range(picture.shape[0]):
  8. for j in range(picture.shape[1]):
  9. val = np.sum(picture[i,j])
  10. val = val/3
  11. picture[i,j] = [val, val, val]
  12. return picture
  13. '''
  14. main entry
  15. '''
  16. def main():
  17. picture = cv2.imread('./lena.bmp')
  18. print(picture.shape[0])
  19. print(picture.shape[1])
  20. print(picture.shape[2])
  21. picture = generate_gray_data(picture)
  22. cv2.imshow('lena', picture)
  23. cv2.waitKey(0)
  24. cv2.destroyAllWindows()
  25. if __name__ == '__main__':
  26. main()

7、分析和总结

        opencv作为一个库来说,本身无所谓好坏。我们使用它,也是为了实现特定的功能。它可以和c++配合,也可以和python进行搭档,一般来说我们处理的流程是这样的,如下图所示,大家可以熟记于心一下。python也好,c++也好,opencv也好,自己写算法也好,嵌入式开发也好,每一个步骤都有自己的用途。不存在谁取代谁的问题。这个过程当然可以简化,也可以添加新的流程,最终目的都是为了满足客户的需求,同时实现个人的价值和利益。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/凡人多烦事01/article/detail/398450
推荐阅读
相关标签
  

闽ICP备14008679号