基于opencv的计算机视觉基础

本文介绍了使用OpenCV进行图像读取、展示、写入及像素操作的方法。通过cv2.imread和cv2.imshow读取并显示图片,cv2.imwrite进行图片写入,并探讨了不同质量的图片保存,包括JPEG(有损压缩)和PNG(无损压缩)。此外,还详细阐述了像素操作,如读取和修改像素点的RGB值,并展示了如何在图片上绘制蓝色线段。
摘要由CSDN通过智能技术生成

基于这篇博客学习的基础框架搭配,以及opencv安装可以自行在其他博客查阅

1、图片的读取与展示

# 图片的读取与展示
import cv2

'''
  cv2.imread-图片读取
  cv2.imread('图片名称', 读取类型)
  读取类型:如果为0-读取灰度图片;1-读取彩色图片
'''
# D:\LearningData\deepLearning\tensorflow_exercise\img_base\image0.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三种颜色表示,转化成二进制如下所示(计算机智能储存二进制文件)
在这里插入图片描述
图片的宽高
图片的宽高代表图片在水平和竖直方向上分别有多少个像素点,比如1024*682代表水平方向上有682个像素点,竖直方向上有1024个像素点。
图片所占内存
比如1024 * 682大小的图片,1024 * 682个像素,每个像素有3个颜色分量,每个颜色分量有8位的颜色深度,那么就是1024 * 682 * 3 * 8bit,如果转换成字节那么再除以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后,当前程序自动执行

可以看到在我们图片的左上角出现了一条蓝色的线段
在这里插入图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值