可视化|opencv基础入门——环境搭建与基础操作

参考教程:

  • 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)

结果:
可视化|opencv基础入门——环境搭建与基础操作
文章图片

生成了一张.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

可视化|opencv基础入门——环境搭建与基础操作
文章图片

  • 当然,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基础入门——环境搭建与基础操作
文章图片

    推荐阅读