Python系列之二——图说OpenCv

简介: opencv的强大无须质疑,前段时间一直在用c++,总感觉怪怪的,就想着换个语言试试看,这不,小詹同学开始尝试Python啦~ 上期在windows系统上搭建好python和opencv环境后,这期简单操作下opencv中的基本图像处理,Let‘s go~

一、图像的读取和显示

       opencv中的imread、imwrite、imshow等函数是个老生常谈的问题了,python中只要在文件前边import cv2模块即可~

       代码如下所示可滑动,下同

1# -- coding: utf-8 --
2import cv2
3path = 'image.jpg'  #path代表图片路径
4image = cv2.imread(path)  #读取指定路径图片
5cv2.imshow("original",image) #显示指定路径的图片
6cv2.waitKey(0) #按键检测,当按键才往下执行
7cv2.destroyAllWindows() #按任意键盘后,销毁所有窗口

       运行结果如下所示:(在original窗口显示图片)

3.jpg

二、图像类型的检测

      图片是由像素组成的,我们可以先检验下读入的图片数据是什么类型数据,长什么样?(其实读入的是数组)      

利用type()函数即可查看数据类型
利用sth.shape查看具体信息

1# -- coding: utf-8 --
2import cv2
3path = 'image1.jpg'  #path代表图片路径
4image = cv2.imread(path)  #读取指定路径图片
5print(type(image))  #查看数据类型
6print(image.shape)  #查看具体的信息

        得到的结果为:

1>>>  <class 'numpy.ndarray'>
2>>>  (500, 749, 3)

        表示读取的数据为一三维数组,其尺寸大小为500*749(高*宽)。

三、图像上输出文本

        图像上输入文本使用以下函数:

cv2.putText(img,text,org,fontFace,fontScale,color)

   1.img 表示cv2读入的图片数据

   2.test 表示要写入的文本

   3.文字在图片中的坐标。坐标原点位于图片左上角。如org=(100,400),从图片最左边起100,从最最上面往下400。

   4.字体。如cv2.FONTHERSHEYTRIPLEX、cv2.FONTHERSHEYPLAIN

   5.颜色,三原数组,使用RGB模式编码。如白色为(255,255,255)

       具体程序代码如下:

1# -- coding: utf-8 --
 2import cv2
 3path = 'image.jpg'  #path代表图片路径
 4image = cv2.imread(path)  #读取指定路径图片
 5
 6x, y = 200,40  #指定添加文本信息的位置坐标
 7cv2.putText(img = image, text = 'What a beautiful girl!',
 8            org = (x, y), 
 9            fontFace = cv2.FONT_HERSHEY_TRIPLEX,
10            fontScale = 1, color = (0,0,255))
11cv2.imshow('add text  on image',image)
12
13cv2.waitKey()
14cv2.destroyAllWindows()

        运行结果如下图:

4.jpg

四、图像大小调整

        图像尺寸大小调整使用以下函数:(这里忽略结果展示啦~)

resize(src, dsize, fx, fy)
1.src 表示输入图片
2.dsize 表示输出图片的大小,如果为dsize为None(或0),程序会默认执 行disze=(fxsrccols,fysrcrows)
3.fx 表示图片水平方向的缩放比例(倍数)
4.fy 表示图片垂直方向的缩放比例(倍数)

五、图像的旋转和镜像

1.图像旋转

     利用的是图像仿射变换及其变化矩阵:

getRotationMatrix2D(center, angle, scale)

   1.center 旋转中心

   2.angle 旋转角度

   3.旋转后图像的缩放比例

        代码如下所示:(结果也不做展示了~)

1#获取变化矩阵;第一个参数旋转中心,第二个参数旋转角度,第三个参数缩放比例
2M = cv2.getRotationMatrix2D((cols/2,rows/2), 10, 0.4)
3new_image = cv2.warpAffine(image,M,(rows,cols))
4cv2.imshow('raw image',image)
5cv2.imshow('new_image',new_image)

2.图像镜像

        假设图片是对称的,图片宽度(图片像素列数)为w,选取任意行(这里选第r行)那么图中对称两个点A1、A2,其中A1点坐标(r,w1),注意到数组都是从0开始。A2点必然要满足:

A1[r,w1,:]= A2[r,w-1-w1,:]

         所以,实现图像镜像代码为:

1rows = image.shape[0]  #图像列数
2cols = image.shape[1]  #图像行数
3mirror_col = int(cols/2)  #对称于中间一列
4for col in range(mirror_col):
5   image[:, col,:] = image[:, cols-1-col,:]   #镜像操作

       以lenno图片为例,镜像操作前后结果如下:


5.jpg

六、图像的平铺

       以2*3平铺为例,可以看作是图像对应数组的复制过程,其代码如下:

1#新图平铺2行三列,即新图行数变为2倍,列数变为3倍
 2new_rows = rows * 2
 3new_cols = cols * 3  
 4new_image = np.zeros(shape=(new_rows, new_cols, 3), dtype=np.uint8) #生成新图的数组
 5#复制原图的每一个像素
 6row = 0
 7col = 0
 8for now_row in range(new_rows):
 9    for now_col in range(new_cols):
10        new_image[now_row, now_col, :] = image[row, col, :]
11        col+=1
12        #超过原图列数范围,归0,重新开始复制
13        if col>=cols:
14            col=0
15    row+=1
16    #超过原图行数范围,归0,重新开始复制
17    if row>=rows:
18        row=0
19cv2.imshow('new image', new_image)
20cv2.waitKey()
21cv2.destroyAllWindows()

        结果如下所示:


6.jpg

七、图像的灰度转换

       灰度化较为简单,不做过多叙述,代码如下:

1# -- coding: utf-8 --扫一扫关注我们,
更多咨询早知道!
2import numpy as np
3import cv2
4path = 'image.jpg'  #path代表图片路径
5image = cv2.imread(path)  #读取指定路径图片
6cvt_image = cv2.cvtColor(image,cv2.COLOR_BGR2GRAY)
7cv2.imshow('cvtColor image', cvt_image)
8cv2.waitKey()
9cv2.destroyAllWindows()

        结果如下所示:

7.jpg

    好啦~这就是小詹同学关于Python第二讲的全部内容,如果您觉得有价值,欢迎扫码关注和打赏噢~

相关文章
|
3月前
|
计算机视觉 Windows Python
windows下使用python + opencv读取含有中文路径的图片 和 把图片数据保存到含有中文的路径下
在Windows系统中,直接使用`cv2.imread()`和`cv2.imwrite()`处理含中文路径的图像文件时会遇到问题。读取时会返回空数据,保存时则无法正确保存至目标目录。为解决这些问题,可以使用`cv2.imdecode()`结合`np.fromfile()`来读取图像,并使用`cv2.imencode()`结合`tofile()`方法来保存图像至含中文的路径。这种方法有效避免了路径编码问题,确保图像处理流程顺畅进行。
343 1
|
4月前
|
机器学习/深度学习 人工智能 算法
Python在计算机视觉(CV)中扮演重要角色,得益于其丰富的库如OpenCV、Pillow和Scikit-image。
【7月更文挑战第5天】Python在计算机视觉(CV)中扮演重要角色,得益于其丰富的库如OpenCV、Pillow和Scikit-image。CV涉及图像处理、模式识别和机器学习,用于图像理解和生成。Python的跨平台特性和活跃社区使其成为CV的理想工具。基本流程包括图像获取、预处理、特征提取、分类识别及图像生成。例如,面部识别通过预处理图像,使用如`cv2.CascadeClassifier`进行检测;物体检测类似,但需适应不同目标;图像生成则利用GAN创造新图像。
68 4
|
1月前
|
计算机视觉 Python
python利用pyqt5和opencv打开电脑摄像头并进行拍照
本项目使用Python的PyQt5和OpenCV库实现了一个简单的摄像头应用。用户可以通过界面按钮打开或关闭摄像头,并实时预览视频流。点击“拍照”按钮可以捕捉当前画面并保存为图片文件。该应用适用于简单的图像采集和处理任务。
103 0
python利用pyqt5和opencv打开电脑摄像头并进行拍照
|
1月前
|
机器学习/深度学习 算法 计算机视觉
【Python篇】Python + OpenCV 全面实战:解锁图像处理与视觉智能的核心技能
【Python篇】Python + OpenCV 全面实战:解锁图像处理与视觉智能的核心技能
71 2
|
2月前
|
机器学习/深度学习 计算机视觉 Python
opencv环境搭建-python
本文介绍了如何在Python环境中安装OpenCV库及其相关扩展库,包括numpy和matplotlib,并提供了基础的图像读取和显示代码示例,同时强调了使用Python虚拟环境的重要性和基本操作。
|
3月前
|
算法 计算机视觉 Python
python利用opencv进行相机标定获取参数,并根据畸变参数修正图像附有全部代码(流畅无痛版)
该文章详细介绍了使用Python和OpenCV进行相机标定以获取畸变参数,并提供了修正图像畸变的全部代码,包括生成棋盘图、拍摄标定图像、标定过程和畸变矫正等步骤。
python利用opencv进行相机标定获取参数,并根据畸变参数修正图像附有全部代码(流畅无痛版)
|
3月前
|
存储 编解码 API
python多种方法压缩图片,opencv、PIL、tinypng、pngquant压缩图片
python多种方法压缩图片,opencv、PIL、tinypng、pngquant压缩图片
257 1
|
3月前
|
算法 定位技术 vr&ar
一文了解PnP算法,python opencv中的cv2.solvePnP()的使用,以及使用cv2.sovlePnP()方法标定相机和2D激光雷达
一文了解PnP算法,python opencv中的cv2.solvePnP()的使用,以及使用cv2.sovlePnP()方法标定相机和2D激光雷达
534 0
一文了解PnP算法,python opencv中的cv2.solvePnP()的使用,以及使用cv2.sovlePnP()方法标定相机和2D激光雷达
|
3月前
|
机器学习/深度学习 人工智能 监控
利用Python和OpenCV实现实时人脸识别系统
【8月更文挑战第31天】本文将引导您了解如何使用Python结合OpenCV库构建一个简易的实时人脸识别系统。通过分步讲解和示例代码,我们将探索如何从摄像头捕获视频流、进行人脸检测以及识别特定个体。本教程旨在为初学者提供一条明晰的学习路径,帮助他们快速入门并实践人脸识别技术。
|
4月前
|
机器学习/深度学习 数据采集 算法
Python基于OpenCV和卷积神经网络CNN进行车牌号码识别项目实战
Python基于OpenCV和卷积神经网络CNN进行车牌号码识别项目实战
304 19