首页 > 其他分享 >Opencv 图像处理:图像基础操作与灰度转化

Opencv 图像处理:图像基础操作与灰度转化

时间:2022-10-25 13:00:36浏览次数:79  
标签:plt img imshow cv2 Opencv 图像处理 灰度 图像

本文已收录于Opencv系列专栏: ​​深入浅出OpenCV​​ ,专栏旨在详解Python版本的Opencv,为计算机视觉的开发与研究打下坚实基础。免费订阅,持续更新。

图像属性

1.图像格式

图像压缩比: 通过编码器压缩后的图象数字大小和原图象数字大小的压缩比。

  • BMP 格式 Windows系统下的标准位图格式,未经过压缩,一般图像文件会比较大。在很多软件中被广泛应用。
  • JPEG 格式 也是应用最广泛的图片格式之一,它采用一种特殊的有损压缩算法,达到较大的压缩比可达到 2:1 甚至 40:1,互联网上最广泛使用的格式
  • GIF 格式 不仅可以是一张静止的图片,也可以是动画,并且支持透明背景图像,适用于多种操作系统, 体型很小,网上很多小动画都是 GIF 格式。但是其色域不太广只支持 256 种颜色。
  • PNG 格式 与JPG 格式类似,压缩比高于 GIF(因此png损失较小,质量更好),支持图像透明支持 Alpha 通道调节图像的透明度。
  • TIFF 格式 它的特点是图像格式复杂、存贮信息多。在 Mac 中广泛使用, 非常有利于原稿的复制。很多地方将 TIFF 格式用于印刷。

2.图像尺寸

图像尺寸
  • 图像尺寸的长度与宽度是以像素为单位的。
像素
  • 像素是数码影像最基本的单位,每个像素就是一个小点,而不同颜色的点聚集起来就变成一幅照片。
  • 灰度像素点数值范围在 0 到 255 之间, 0 表示黑、255 表示白,其它值表示处于黑白之间;
  • 黑白照片只需一个通道表示即可。
  • 彩色图用红、绿、蓝三通道的二维矩阵来表示。每个数值也是在 0 到 255 之间, 0 表示相应的基色,而 255 则代表相应的基色在该像素中取得最大值。
读入图像cv2.imread()
cv2.imread()

参数说明:

第一参数为待读路径;

第二个参数为读取方式,常见读取方式有三种

Opencv 图像处理:图像基础操作与灰度转化_灰度图

#导入opencv的python版本依赖库cv2
import cv2

#使用opencv中imread函数读取图片,
#0代表灰度图形式打开,1代表彩色形式打开
img = cv2.imread('split.jpg',1)
print(img.shape)
#print(img) 打印图像的数组
显示图像cv2.imshow()
cv2.imshow()

参数说明:

参数1 :窗口的名字

参数2 :图像数据名/变量名

#导入opencv依赖库
import cv2

#读取图像,读取方式为彩色读取
img = cv2.imread('split.jpg',1)
#
cv2.imshow('photo',img)
k = cv2.waitKey(0)
if k == 27: # 输入ESC键退出
cv2.destroyAllWindows()
elif k == ord('s'): # 输入S键保存图片并退出
cv2.imwrite('split_.jpg',img)
cv2.destroyAllWindows()
也可matplotlib导入图像
#加载第三方包
import cv2
from matplotlib import pyplot as plt

#使用Matplotlib导入图像
img = cv2.imread('test_image.png',0)
plt.imshow(img, cmap = 'gray', interpolation = 'bicubic')

#隐藏X、Y轴上的刻度
#plt.xticks([]), plt.yticks([])
plt.show()

Opencv 图像处理:图像基础操作与灰度转化_OpenCV_02

键盘绑定cv2.waitKey(0)
#cv2.waitKey()是一个键盘绑定函数
#若为数字则是单位毫秒,若为0代表等待键盘输入。
cv2.waitKey(0)
删除窗口cv2.destrovAllWindows()
# cv2.destroyAllWindows() 删除窗口
# 默认值为所有窗口,参数一为待删除窗口名。
cv2.destrovAllWindows()
保存图像cv2.imwrite()
cv2.imwrite('split_.jpg',img)

参数说明:

参数1 :图像名(包括格式)

参数2 :待写入的图像数据变量名。

3.图像分辨率

  • 分辨率: 单位长度中所表达或截取的像素数目。每英寸图像内的像素点数,单位是像素每英寸 (PPI) 。图像分辨率越高,像素的点密度越高,图像越清晰。
  • 通道数: 图像的位深度,是指描述图像中每个pixel 数值所占的二进制位数。 位深度 越大则图像能表示的颜色数就越多,色彩越丰富逼真。
  • 8 位:单通道图像,也就是灰度图,灰度值范围2**8=256
  • 24 位:三通道 3*8=24
  • 32 位:三通道加透明度 Alpha 通道
灰度转化
  • 目的
    将三通道图像(彩色图)转化为单通道图像(灰度图)。
  • 公式
    3---->1: GRAY = B * 0.114 + G * 0.587 + R * 0.299
    1---->3: R = G = B = GRAY; A = 0
  • 函数:
    cv2.cvtColor(img,flag)
  • 参数说明
    参数1 :待转化图像
    参数2 :flag 就是转换模式
  • cv2.COLOR_BGR2GRAY :彩色转灰度
  • cv2.COLOR_GRAY2BGR:单通道转三通道
#导入opencv
import cv2
#读入原始图像,使用cv2.IMREAD_UNCHANGED
img = cv2.imread("girl.jpg",cv2.IMREAD_UNCHANGED)
#查看打印图像的shape
shape = img.shape
print(shape)
#判断通道数是否为3通道或4通道
if shape[2] == 3 or shape[2] == 4 :
#将彩色图转化为单通道图
img_gray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
cv2.imshow("gray_image",img_gray)
cv2.imshow("image", img)
cv2.waitKey(1000) # 等待1000毫秒也就是1秒
cv2.destroyAllWindows()
RGB与 BGR 转化

Opencv读取图像是以BGR读取的,但是许多包是RGB读取,因此有些情况下需要转化。

转化的方法

opencv自带的方法转

cv2.cvtColor(img, cv2.COLOR_BGR2RGB)

numpy转

img[:,:,::-1] #列左右翻转

示例:

import cv2 
import matplotlib.pyplot as plt
img = cv2.imread("test2.png", cv2.IMREAD_COLOR)
cv2.imshow("Opencv_win", img)
# 用opencv自带的方法转
img_cv_method = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)
# 用numpy转,img[:,:,::-1]列左右翻转
img_numpy_method = img[:,:,::-1] # 本来是BGR 现在逆序,变成RGB
# 用matplot画图
plt.subplot(1,3,1)# 划分一个1行3列的空间
plt.imshow(img_cv_method)
plt.subplot(1,3,2)
plt.imshow(img_numpy_method)
plt.subplot(1,3,3)
plt.imshow(img)
plt.savefig("./plt.png")
plt.show()
#保存图片
cv2.imwrite("opencv.png", img)
cv2.waitKey(0)
cv2.destroyAllWindows()

Opencv 图像处理:图像基础操作与灰度转化_灰度图_03

标签:plt,img,imshow,cv2,Opencv,图像处理,灰度,图像
From: https://blog.51cto.com/u_15736437/5793936

相关文章

  • Opencv 图像处理:图像通道、直方图与色彩空间
    本文已收录于Opencv系列专栏:​​深入浅出OpenCV​​,专栏旨在详解Python版本的Opencv,为计算机视觉的开发与研究打下坚实基础。免费订阅,持续更新。1.图像通道通道分离目的将......
  • Opencv 图像处理:数字图像的必会知识
    本文已收录于Opencv系列专栏:​​深入浅出OpenCV​​,专栏旨在详解Python版本的Opencv,为计算机视觉的开发与研究打下坚实基础。免费订阅,持续更新。数字图像1.数字图像概念数......
  • opencv图像处理基础
    图像的获取获取方式网页上下载(拷贝)——自然图像Numpy数组生成图片图像的四个属性img.shape:返回元组,其值是图像的高度和宽度(即数组的行和列);彩色图像有第三个......
  • opencv图像处理基础
    图像的获取获取方式网页上下载(拷贝)——自然图像Numpy数组生成图片图像的四个属性img.shape:返回元组,其值是图像的高度和宽度(即数组的行和列);彩色图像有第三个......
  • 畸变矫正、透视变换加速(OpenCV C++)
    前两周,同事和我说检测时间超时,其中对图像做畸变矫正和投影变换就要花费25ms(3000×3000的图)。而此时我们已经用上了文章opencv图像畸变矫正加速、透视变换加速方法总结中的......
  • Windows下使用VSCode配置OpenCV开发环境
    Windows下使用VSCode配置OpenCV开发环境通过使用GitHub上他人编译好的动态库,进行OpenCV环境的配置。目录MinGW安装选择POSIX保留两个MinGW检验是否成功C/CP......
  • Photoshop 2023 (ps 2023) for Mac/Win(图像处理必备软件)支持M1最新版
    ps作为一款电脑必备修图工具,受到广大网友的推崇,目前,该版本已经更新到ps2023版!最新的ps2023帮助你组合、修饰和重新混合您的照片,为您的旧黑白添加新颜色,或者让不需要的东......
  • 计算机视觉的开端——OPenCV编程
    计算机视觉是一门研究如何使机器“看”的科学,更进一步的说,就是是指用摄像头和计算机代替人眼对目标进行识别、跟踪和测量等,并进一步做图像处理,使计算机处理成为更适合人眼......
  • python-opencv cv.imshow 错误
    本文平台windows报错信息: cv2.imshow('imshow',img))Thefunctionisnotimplemented.RebuildthelibrarywithWindows,GTK+2.xorCocoasupport.Ifyouare......
  • vivo 鲁班平台 RocketMQ 消息灰度方案
    本文作者:区二立-vivo技术架构总监方案背景RocketMQ使用广泛,技术场景下,可以用于异步解耦,比如不同系统间调用业务链上做分段式处理或使用不同语言的两个系统间的解耦;......