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

【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱: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的图片了。我们可以打开一个编辑器,接下来就是输入下面这些脚本即可,

import cv2

'''
main entry
''' 
def main():
    picture = cv2.imread('./lena.bmp')
    cv2.imshow('lena', picture)
    cv2.waitKey(0)
    cv2.destroyAllWindows()
 
if __name__ == '__main__':
    main()

5、执行脚本

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

C:\Python39\python.exe demo.py

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

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

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

import cv2
import numpy as np
 
'''
use average value
'''
def generate_gray_data(picture):
    for i in range(picture.shape[0]):
        for j in range(picture.shape[1]):
            val = np.sum(picture[i,j])
            val = val/3
            picture[i,j] = [val, val, val]
    return picture
 

'''
main entry
'''
def main():
    picture = cv2.imread('./lena.bmp')
    print(picture.shape[0])
    print(picture.shape[1])
    print(picture.shape[2])
    picture = generate_gray_data(picture)
    cv2.imshow('lena', picture)
    cv2.waitKey(0)
    cv2.destroyAllWindows()
 
if __name__ == '__main__':
    main()

7、分析和总结

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

相关推荐
9分钟带帽7 分钟前
opencv存图速度测试
opencv·halcon
马剑威(威哥爱编程)13 分钟前
分布式Python计算服务MaxFrame使用心得
开发语言·分布式·python·阿里云
翱翔-蓝天17 分钟前
Python知识图谱框架
开发语言·python·知识图谱
西猫雷婶1 小时前
python学opencv|读取图像(二十二)使用cv2.polylines()绘制多边形
开发语言·python·opencv
伊一大数据&人工智能学习日志1 小时前
OpenCV计算机视觉 02 图片修改 图像运算 边缘填充 阈值处理
人工智能·opencv·计算机视觉
m0_693809381 小时前
Python——day09
python·学习
极客小张2 小时前
基于STM32的智慧农业控制系统设计:python可视化、UART、I2C、TCP/HTTP技术
python·stm32·单片机·物联网·tcp/ip·毕业设计·课程设计
魔道不误砍柴功2 小时前
Java 中反射的高级用法:窥探 Java 世界的魔法之门
java·开发语言·python
0wioiw02 小时前
Flask-----SQLAlchemy教程
后端·python·flask
Faylynn2 小时前
Python:方法间的多个返回值的传输和引用
python·pycharm