0
点赞
收藏
分享

微信扫一扫

基于python的opencv的学习

绪风 2022-01-31 阅读 54

文章目录


前言


一、安装开发环境

在这里插入图片描述

记住 update   PATH variable 一定要打上钩,否则就要自己去配置环境变量。

 也推荐官网安装。如果网速过慢,也可以在博客上搜索共享的安装包。

建议两个都选上。

然后在pycharm上settings中 打开interrupt 配置anaconda的解释器就可,说白了就是找到python.exe文件即可

我安装opencv python的方法是从官网上下载whl 文件配置

因为pip 的方法只能配置 3.5一下的opencv —python

如果官网过慢的话

 在这里插入图片描述

 将文件下载到 C:\anaconda3\Lib\site-packages,其实就是找到自己安装环境那个文件夹中site—packages。

用Windows+R 打开cmd

二、简单介绍

这里呢,我学习opencv-python 主要用的书是《OPENCV3计算机视觉 PYthon语言实现》,还有各位大佬GitHub以及博客上的各种分享。

首先,opencv作为一个九几年就开源的软件库以及开源社区,在经历了多年,拥有无私开源精神的程序员们的分享下,内置了许多图像处理以及计算机视觉方面的库。

Core该模块包含 OpenCV 库的基础结构以及基本操作。
Improc图像处理模块包含基本的图像转换,包括滤波以及类似的卷积操作。
Highgui在 OpenCV 3.0中,分割为 imcodecs、videoio 以及 highgui 三部分。

这个模块包含可以用来显示图像或者简单的输入的用户交互函数。这可以看作是一个非常轻量级的 Windows UI 工具包。
Video该模块包含读取和写视频流的函数。
Calib3d这个模块包括校准单个、双目以及多个相机的算法实现。
Feature2d这个模块包含用于检测、描述以及匹配特征点的算法。
Objdectect这个模块包含检测特定目标,比如人脸或者行人的算法。也可以训练检测器并用来检测其他物体。
Ml机器学习模块本身是一个非常完备的模块,包含大量的机器学习算法实现并且这些算法都能和 OpenCV 的数据类型自然交互。
FlannFlann 的意思是“快速最邻近库”。这个库包含一些你也许不会直接使用的方法,但是其他模块中的函数会调用它在数据集中进行最邻近搜索。
GPU在 OpenCV 中被分割为多个 cuda* 模块。

GPU 模块主要是函数在 CUDA GPU 上的优化实现,此外,还有一些仅用于 GPU 的功 能。其中一些函数能够返回很好的结果,但是需要足够好的计算资源,如果硬件没有GPU,则不会有什么提升。
Photo这是一个相当新的模块,包含计算摄影学的一些函数工具。
Stitching本模块是一个精巧的图像拼接流程实现。这是库中的新功能,但是,就像 Photo 模块一样,这个领域未来预计有很大的增长。
Nonfree在 OpenCV 3.0 中,被移到 opencv_contrib/xfeatures2d。

OpenCV 包含一些受到专利保护的或者受到使用限制的(比如 SIFT 算法)算法。这些算法被隔离到它们自己的模块中,以表明你需要做一些特殊的工作,才可以在商业产品中使用它们。
Contrib在 OpenCV 3.0 中,融合进了 opencv_contrib。

这个模块包含一些新的、还没有被集成进 OpenCV 库的东西。
Legacy在 OpenCV 3.0 中,被取消。

这个模块包含一些老的尚未被完全取消的东西。
ocl在OpenCV 3.0 中,被取消,取而代之的是 T-API。

这是一个较新的模块,可以认为它和 GPU 模块相似,它实现了开放并行编程的 Khronos OpenCL 标准。虽然现在模块的特性比 GPU 模块少很多,但 ocl 模块的目标是提供可以运行在任何 GPU 或者是其他可以搭载 Khronos 的并行设备。这与 GPU 模 块形成了鲜明的对比,后者使用 Nividia CUDA 工具包进行开发,因此只能在 Nividia GPU 设备上工作。

2.图像处理的简单原理

这里的内容是引用 博客主 盼小辉的,想看可以用这个链接去看看原文。

而像素、颜色、通道、图像和颜色空间
在表示图像时,有多种不同的颜色模型,但最常见的是红、绿、蓝 (RGB) 模型。
RGB 模型是一种加法颜色模型,其中原色 (在RGB模型中,原色是红色 R、绿色 G 和蓝色 B) 混合在一起就可以用来表示广泛的颜色范围。
每个原色 (R, G, B) 通常表示一个通道,其取值范围为[0, 255]内的整数值。因此,每个通道有共256个可能的离散值,其对应于用于表示颜色通道值的总比特数 (2 8 = 256 2^8=2562 
8
 =256)。此外,由于有三个不同的通道,使用 RGB 模型表示的图像称为24位色深图像:


通过调节这三个数值,可以变换出你想要的颜色

图像描述
图像可以描述为2D函数 f ( x , y ) f(x, y)f(x,y),其中 ( x , y ) (x, y)(x,y) 是空间坐标,而 f ( x , y ) f(x, y)f(x,y) 是图像在点 ( x , y ) (x, y)(x,y) 处的亮度或灰度或颜色值。另外,当f(x, y)和(x, y)值都是有限离散量时,该图像也被称为数字图像,此时:

x ∈ [ 0 , h − 1 ] x∈ [0, h-1]x∈[0,h−1],其中 h hh 是图像的高度
y ∈ [ 0 , w − 1 ] y∈ [0, w-1]y∈[0,w−1],其中 w ww 是图像的宽度
f ( x , y ) ∈ [ 0 , L − 1 ] f(x, y)∈ [0,L-1]f(x,y)∈[0,L−1],其中 L = 256 L=256L=256 (对于8位灰度图像)
彩色图像也可以用同样的方式表示,只是我们需要定义三个函数来分别表示红色、绿色和蓝色值。这三个单独的函数中的每一个都遵循与为灰度图像定义的 f ( x , y ) f(x, y)f(x,y) 函数相同的公式。我们将这三个函数的子索引 R、G 和 B 分别表示为 f R ( x , y ) f_R(x, y)f 
R

 (x,y)、f G ( x , y ) f_G(x, y)f 
G

 (x,y) 和 f B ( x , y ) f_B(x, y)f 
B

 (x,y)。
同样,黑白图像也可以表示为相同的形式,其仅需要一个函数来表示图像,且 f ( x , y ) f(x, y)f(x,y) 只能取两个值。通常,0 表示黑色、1 表示白色。
这里我也引用了博客主盼小辉 的文章内容,大家看看就行。

接下来开始对cv在python应用的学习


三、opencv的I/O读与写

  首先我们找到一张图片放置在你项目文件中,如果大家对 opencv的API并不熟悉,还是建议大家,使用图像的绝对路径,例如windows下的绝对路径为C:\user\(这里是你的此电脑用户名)\(图片)。如果不是很明白的话,有个简单粗暴的方法,将图片放在此项目的文件夹下,这叫做相对路径。 

 如上图的Taylor.jiff

然后呢 opencv中的读写函数是

cv2.imread()//读
cv2.imwrite()// 写

 例如

import cv2 as cv  #cv2的读写是BGR模式
img=cv.imread('Taylor.jpg')#这张图是存在于当前目录下
print(img) #打印结果是一个numpy结构的矩阵

 

四、阈值操作

 五、图像平滑处理

1、均值滤波

2.方框滤波

cv2.boxerFilter(img,-1,(3,3),nomralize=true) #方框滤波函数 使用方法和均值滤波函数差不多

值得一提 第四个参数是归一化, 使用参数true 和均值滤波是一样的

如果指定 nomralize 为 false ,越界值会直接取255

3.高斯滤波

cv.getGaussianblur(img,(3,3),1) #服从 高斯分布 中间值占比较大,值得注意的是前两个参数。

 六、形态学 腐蚀操作与膨胀操作

五、项目开始,用opencv python 写出一个带有数字识别功能的程序

总结

  这是简易版本,后续有更复杂版本

from aip import AipOcr  # 百度的数字识别库
import cv2 as cv  # opencv python
import os

def cv_show(name, img):  # 自定义的窗口显示函数
    cv.imshow(name, img)
    cv.waitKey(0)


img = cv.imread('number.jpg')
a, img2 = cv.threshold(img, 127, 255, cv.THRESH_BINARY)  # 阈值转化
cv.imwrite('review.jpg',img2)
cv_show("BEFORE", img2)

""" 你的 APPID AK SK """  # 百度 api接口
APP_ID = '25565754'
API_KEY = 'dhIEGfuqPfkwebyMZ0Cw8TcX'
SECRET_KEY = 'dY4AC6f7BcIT0NGh011YbX9oTLzRhKAR'  # 百度控制台
client = AipOcr(APP_ID, API_KEY, SECRET_KEY)
""" 读取图片 """
def get_file_content(filePath):
    with open(filePath, 'rb') as fp:
        return fp.read()
list=os.listdir("C:\pythonfile\pythonProject3")
print(list)
a=input("输入处理文件:")
image = get_file_content(a)
result=client.basicGeneral(image);
print(result)

提示:这里对文章进行总结:
例如:以上就是今天要讲的内容,本文仅仅简单介绍了pandas的使用,而pandas提供了大量能使我们快速便捷地处理数据的函数和方法。

举报

相关推荐

0 条评论