基于这篇博客学习的基础框架搭配,以及opencv安装可以自行在其他博客查阅
1、图片的读取与展示 # 图片的读取与展示 import cv2 cv2.imread-图片读取 cv2.imread(图片名称, 读取类型) 读取类型:如果为0-读取灰度图片;1-读取彩色图片 # D:LearningDatadeepLearningtensorflow_exerciseimg_baseimage0.jpg img = cv2.imread(./img_base/image0.jpg, 1) cv2.imshow-图片展示 cv2.imshow(窗体名称, 展示内容) cv2.imshow(image, img) stop当前程序 只有stop了才能展示当前的图片效果 cv2.waitKey(0)效果
2、图片写入在上一个例子中,其实代码很简单,我们所感觉到的基本上是两步:1、文件读取;2、数据解析
但其实一共分为4步:1、文件读取;2、分装格式解析;3、数据解码;4、数据加载只是imread和imshow将他们封装好了
我们要进行的图片写入就是把经过解析后的数据写入即可,这里我使用同一张图片进行读取解析与写入的操作图片写入 1、文件读取;2、分装格式解析;3、数据解码;4、数据加载 现在的分装格式一般有jpg、png import cv2 # cv2.imread已经完成1、文件读取;2、分装格式解析 img = cv2.imread(./img_base/image0.jpg, 1) cv2.imwrite(image1.jpg, img) # cv2.imwrite(图片名称, 图片数据),这里的图片数据是已经解析之后的数据
效果已经多出了一张我们写入的image1.jpg
3、不同图片质量保存主要还是针对cv2.imwrite方法,只是这个方法可以在保存的时候实现不同质量的图片保存
(1)jpeg压缩(有损压缩)不同图片质量保存 import cv2 img = cv2.imread(./img_base/image0.jpg, 1) cv2.imwrite(图片名称, 图片数据, [压缩方式, 压缩比]) 这里的图片数据是已经解析之后的数据 图片质量范围是[0,100] cv2.imwrite(imageTest.jpg, img, [cv2.IMWRITE_JPEG_CHROMA_QUALITY, 0])
首先设置图片质量为0,数字越低,压缩比越高,图片质量越低对比更改后的图片属性
可以看到图片的体积已经进行了压缩,这种压缩是以牺牲图片质量为代价的压缩(有损压缩)(2)png压缩(无损压缩)
png不同图片质量保存 无损压缩 并且可以设置透明度 img = cv2.imread(./img_base/image0.jpg, 1) cv2.imwrite(图片名称, 图片数据, [压缩方式, 压缩比]) 这里的图片数据是已经解析之后的数据 压缩比范围是[0,9] cv2.imwrite(imageTest.png, img, [cv2.IMWRITE_PNG_COMPRESSION, 0])4、像素操作
像素点
每个方块代表一个像素点,在计算机中,每种颜色都可以用RGB三种颜色分量进行合成,每个颜色分量的范围在[0, 255]颜色深度
对颜色深度来说,对于8bit的来说一共可以表示2^8=256种颜色一个像素点可以有RGB三种颜色表示,转化成二进制如下所示(计算机智能储存二进制文件)
图片的宽高图片的宽高代表图片在水平和竖直方向上分别有多少个像素点,比如1024682代表水平方向上有682个像素点,竖直方向上有1024个像素点
图片所占内存比如1024682大小的图片,1024682个像素,每个像素有3个颜色分量,每个颜色分量有8位的颜色深度,那么就是102468238bit,如果转换成字节那么再除以8
图片存储的坐标系结构我们通过imread读取的图片数据是个矩阵结构,矩阵中的第一个值描述的x坐标,第二个值描述的y坐标,图片读取回来后是元组形式储存,元组由三个元素组成(正常情况下应该是RGB,但是opencv中读取是bgr)
像素操作:像素的读取与写入 import cv2 img = cv2.imread(./img_base/image0.jpg, 1) (b,g,r) = img[10,10] print(b,g,r, b,g,r)接下来我们对图片数据进行更改写入
像素操作:像素的读取与写入 import cv2 img = cv2.imread(./img_base/image0.jpg, 1) (b,g,r) = img[10,10] # opencv中读取是bgr print(b,g,r, b,g,r) # 从(10,100)到(110,100)进行读取 for i in range(1, 100): # 总共100个像素点 img[10+i, 100] = (255, 0, 0) # bgr的形式,蓝色占比1,所以总体是蓝色 cv2.imshow(image, img) cv2.waitKey(0) # 这里也可以给别的值,代表经过一定ms后,当前程序自动执行
可以看到在我们图片的左上角出现了一条蓝色的线段