参考教程:
- python+opencv3.3视频教学 基础入门-bilibili
- 个人环境
Mac OS python3.7.3
pip3 install opencv-python -i https://pypi.tuna.tsinghua.edu.cn/simple
pip3 install opencv-contrib-python -i https://pypi.tuna.tsinghua.edu.cn/simple
pip3 install pytesseract -i https://pypi.tuna.tsinghua.edu.cn/simple
二、基础操作 1.读写图像
import cv2 as cv#读一张图片
src = https://www.it610.com/article/cv.imread('cat.jpg')
#创建一个GUI显示图片
cv.namedWindow("input image",cv.WINDOW_AUTOSIZE)
#将图片放入窗口
cv.imshow("input image",src)
#指定窗口等待时间,0为无限等待
cv.waitKey(0)
#关闭窗口
cv.destroyAllWindows()
2.加载图像 对于计算机来说,图像就是结构化存储的数据信息。
计算机中图像属性主要包括:
- 通道数目
- 尺寸(高与宽),单位为像素
- 像素数据
- 图像类型
import cv2 as cv
import numpy as npdef get_image_info(image):
"""
输出图像属性
- - - -
image - 图像名
"""
print(type(image))#类型
print(image.shape)#(高,宽,通道数)
print(image.size)#像素数据=高*宽*通道数
print(image.dtype)#每个像素点的每个通道所占的位数
#获取像素数据并打印
pixel_data = https://www.it610.com/article/np.array(image)
print(pixel_data)if __name__ =="__main__":
#读一张图片
src = https://www.it610.com/article/cv.imread('cat.jpg')
#创建一个GUI显示图片
cv.namedWindow("input image",cv.WINDOW_AUTOSIZE)
#将图片放入窗口
cv.imshow("input image",src)
#输出图像属性
get_image_info(src)
#指定窗口等待时间,0为无限等待
cv.waitKey(0)
#关闭窗口
cv.destroyAllWindows()
结果:
(500, 500, 3)
750000
uint8
[[[149 179 228]
[148 178 227]
[148 178 227]
...
[03686]
[44191]
[64393]] [[148 178 227]
[148 178 227]
[147 177 226]
...
[64395]
[ 1148 100]
[ 1249 101]] [[148 178 227]
[147 177 226]
[149 176 226]
...
[94599]
[ 1349 103]
[ 1551 105]] ... [[ 61 120 170]
[ 62 121 171]
[ 62 121 170]
...
[ 356992]
[ 367093]
[ 377194]] [[ 61 120 170]
[ 62 121 171]
[ 62 121 170]
...
[ 346891]
[ 367093]
[ 407497]] [[ 61 120 170]
[ 62 121 171]
[ 62 121 170]
...
[ 346891]
[ 377194]
[ 397396]]]
5.写图像
import cv2 as cvif __name__ == "__main__":
src = https://www.it610.com/article/cv.imread('cat.jpg')
#为了区别,获取灰度图像
gray = cv.cvtColor(src,cv.COLOR_BGR2GRAY)
#将灰度图像写成png形式储存
cv.imwrite("cat.png",gray)
结果:
文章图片
生成了一张.png形式的灰度图像
4.视频显示 调用电脑摄像头读视频
import cv2 as cvdef video_demo():
"""
调用电脑摄像头读视频
"""
#打开电脑摄像头
capture = cv.VideoCapture(0)
while(True):
ret,frame = capture.read()
#镜像调换,1为左右,-1为上下
frame = cv.flip(frame,1)
#显示视频中的每一帧
cv.imshow("video",frame)
c = cv.waitKey(50)
#当输入“Esc”(ASCII码27)时,退出循环
if c == 27:
breakif __name__ == "__main__":
video_demo()
cv.destroyAllWindows()
三、Numpy数组相关的图像操作 1.像素点属性值的修改 通过修改像素点属性值进行反色处理
import cv2 as cv
import numpy as npdef access_pixels(image):
"""
通过修改像素点属性值进行反色处理
- - - -
image - 原图像名
"""
height = image.shape[0]
wide = image.shape[1]
channels = image.shape[2]
# 3通道,分别对应blue,green,red
print("height:",height,"\nwide:",wide,"\nchannels:",channels)
#对每一行
for row in range(height):
#对每一列
for rol in range(wide):
#对每一通道
for c in range(channels):
#修改像素点数值
pv=image[row,rol,c]
image[row,rol,c]=255-pv
#将反色图像写成png形式储存
cv.imwrite("cat.png",image)if __name__ == "__main__":
src = https://www.it610.com/article/cv.imread('cat.jpg')
# 获取当前cpu时钟总圈数
t1 = cv.getTickCount()
access_pixels(src)
t2 = cv.getTickCount()
# 打印用时,单位ms(cv.getTickFrequency()获取cpu时钟每秒走多少圈)
print("time:%fms"%((t2-t1)/cv.getTickFrequency()*1000))
结果:
height: 500
wide: 500
channels: 3
time:2857.571823ms
文章图片
- 当然,cv中也有直接进行反色处理的函数,能大幅节省时间,真正需要时直接调用即可。
src = https://www.it610.com/article/cv.imread('cat.jpg')
t1 = cv.getTickCount()
#反色处理
dst = cv.bitwise_not(src)
cv.imwrite("cat.png",dst)
t2 = cv.getTickCount()
print("time:%fms"%((t2-t1)/cv.getTickFrequency()*1000))
结果:
time:23.518412ms
2.直接创建图像
import cv2 as cv
import numpy as npdef create_image():
"""
直接创建图像
"""
# 3通道图像
img = np.zeros([400,400,3],np.uint8)
# 将蓝色通道(第1通道)与红色通道(第3通道)全部赋为255,应为紫(粉?)图
img[:,:,0]=np.ones([400,400])*255
img[:,:,2]=np.ones([400,400])*255
cv.imwrite("newimg_3c.png",img)# 单通道图像
img = np.ones([400,400,1],np.uint8)
# 将唯一通道(第1通道)全部赋为127,应为灰图
img = img * 127
cv.imwrite("newimg_1c.png",img)if __name__ == "__main__":
create_image()
【可视化|opencv基础入门——环境搭建与基础操作】结果:
文章图片
推荐阅读
- opencv|OpenCV图像识别技术介绍
- Python学习笔记|Newton法求解非线性方程(Python实现)
- Python学习笔记|利用pyecharts绘制省市地图
- Python学习笔记|Python连接MySQL数据库并读取显示数据
- ArcGIS学习|ArcGIS实现全国人口普查数据可视化以及热力图
- #|一个辅助 VSCode 下开发 STM32 的脚本
- 解锁一个新技能,如何在Python代码中使用表情包...
- 图神经网络|什么是机器学习、深度学习、图神经网络()
- 神经网络|一个神经网络有多少个神经元()