上位机图像处理和嵌入式模块部署(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也好,自己写算法也好,嵌入式开发也好,每一个步骤都有自己的用途。不存在谁取代谁的问题。这个过程当然可以简化,也可以添加新的流程,最终目的都是为了满足客户的需求,同时实现个人的价值和利益。

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-01-27 06:30:02       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-01-27 06:30:02       100 阅读
  3. 在Django里面运行非项目文件

    2024-01-27 06:30:02       82 阅读
  4. Python语言-面向对象

    2024-01-27 06:30:02       91 阅读

热门阅读

  1. 如何使用Hugging Face微调大语言模型(LLMs)

    2024-01-27 06:30:02       41 阅读
  2. Form.List的使用,设置某个字段的值

    2024-01-27 06:30:02       54 阅读
  3. overflow产生的滚动条样式设置

    2024-01-27 06:30:02       63 阅读
  4. 介绍一下OpenCV中常用的图像处理函数

    2024-01-27 06:30:02       45 阅读
  5. uniapp获取定位

    2024-01-27 06:30:02       44 阅读
  6. 看书标记【数据科学:R语言实战 2】

    2024-01-27 06:30:02       44 阅读
  7. Lowest Common Ancestor

    2024-01-27 06:30:02       60 阅读
  8. 汇编中$+6的意义与理解

    2024-01-27 06:30:02       50 阅读
  9. ES系列索引、文档、集群、技术原理文章目录

    2024-01-27 06:30:02       57 阅读
  10. 【算法题】74. 搜索二维矩阵

    2024-01-27 06:30:02       44 阅读