图像处理入门一


本文学习书籍为华为云的《从零到壹•Python图像处理及识别》,写博客的目的是为了记录自己的学习过程,其中会参考和借鉴其他博主的内容,如有侵权请及时联系我,我会及时删除;书本链接:https://bbs.huaweicloud.com/blogs/336932

1.图像处理的基本知识

图像都是由像素构成,像素表示为图像中的小方格,这些小方格都有一个明确的位置和被分配的色彩数值。
图像通常分为二值图像、灰度图像和彩色图像,如下图所示;二值图像非黑即白(白色像素为255,黑色像素为0)。灰度图像是指每个像素的信息由一个量化的灰度级来描述的图像,没有彩色信息。彩色图像是 RGB 图像,RGB 表示红、绿、蓝三原色,计算机里所有颜色都是三原色不同比例组成的,即三色通道(彩色图可以看作三维的矩阵)。
在这里插入图片描述

2.OpenCV入门详解

使用OpenCV要安装相关的包,在控制台输(pip install opencv-python),下面将介绍 OpenCV 中常见的数据类型,包括点 Point类、颜色 Scalar 类、尺寸 Size 类、矩形 Rect 类、矩阵 Mat 类。
(1)点Point(表示二维坐标系中的点,含X和Y)

point_list=[(110,110),(130,160)] #一个列表两个点

(2)颜色(包含四个元素的数组,设置像素值 RGB 三通道,第四个参数可忽略)

(3)尺寸Size(它和 Point 相似,主要成员包括 height 和 width)

width,height=img.shape

(4)矩阵Rect【Rect 类称为矩形类,包含 Point类的成员 x 和 y(代表矩形左上角的坐标)和 Size 类的成员 width 和 height(代表矩形的大小)】

#OpenCV 示例
Rect rect = rect1 & rect2; #求两矩形交集
Rect rect = rect1 | rect2; #求两矩形并集
Rect rectShift = rect + point; #矩形平移
Rect rect = rect1 + size; #矩形缩放
#Python 示例
cv2.rectangle(img, (20,20), (150,250), (255,0,0), 2)

(5)矩阵Mat(通用的矩阵类,用来创建和操作多维矩阵)

#OpenCV 示例
Mat M(3,2, CV_8UC3, Scalar(0,0,255));
#Python 示例
np.zeros((256,256,3), np.uint8)

图像的读取等操作-使用cv2

import cv2
#读取图片
img=cv2.imread("apple.jpg")
#显示图片
cv2.imshow("demo",img) #demo为显示图片是的名称
#等待显示
cv2.waitKey(0)
cv2.destoryAllWindows()
#无限期等待输入
k=cv2.waitKey(0)
#如果输入Esc按键退出
if k==27:
	cv2.destoryAllWindows()

图像的展示等操作-借助NumPy/Matplotlib

import cv2
import numpy as np
import matplotlib.pyplot as plt
#读取图像
img1=cv2.imread("lena.png")
img1=cv2.cvtColor(img1,cv2.COLOR_BGR@RGB)#原彩展示
img2=cv2.imread("people.png")
img2=cv2.cvtColor(img2,cv2.COLOR_BGR@RGB)
img3=cv2.imread("flower.jpg")
img3=cv2.cvtColor(img3,cv2.COLOR_BGR@RGB)
img4=cv2.imread("huawei.png")
img4=cv2.cvtColor(img4,cv2.COLOR_BGR@RGB)
#展示四张图
#plt.subplot(2,2)表示生成 2×2 张子图
titles=['lena','people','flower','huawei']
images=[img1,img2,img3,img4]
for i in range(4):
	plt.subplot(2,2,i+1),plt.imshow(images[i],'gray')
	plt.title(titles[i])
	plt.xticks([]),plt.yticks([])
plt.show()

在这里插入图片描述
OpenCV像素处理
OpenCV 中读取图像的像素值可以直接通过遍历图像的位置实现,如果是灰度图像则返回其灰度值,如果是彩色图像则返回蓝色(B)、绿色(G)、红色(G)三个分量值。

img=cv2.imread("lena.png")
#读取像素
test=img[88,142]
#修改像素
img[88,142]=[255,255,255]
#分别获取BGR通道像素
blue=img[88,142,0]
green=img[88,142,1]
red=img[88,142,2]
#将 100 到 200 行、150 到 250 列的像素区域设置为白色255的效果
img[100:200,150:250]=[255,255,255]
cv2.imshow('demo',img)
#等待展示
cv2.waitKey(0)
cv2.destoryAllWindows()

在这里插入图片描述
NumPy像素处理(NumPy 是 Python 提供的数值计算扩展包,拥有高效的处理函数和数值编程工具,Array 是 NumPy 库中最基础的数据结构,表示数组

#NumPy 读取像素调用 item()函数实现,在numpy下图片是一个二维数组
img=cv2.imread('lena.png')
print(type(img))
#Numpy读取像素
print(img.item(78,100,0)
print(img.item(78,100,1)
print(img.item(78,100,2)
#Numpy修改像素
img.itemset((78,100,0),100)
img.itemset((78,100,1),100)
img.itemset((78,100,2),100)

OpenCV创建图像(需要numpy库函数实现)
如下述代码,调用 np.zeros()函数创建空图像,
创建的新图像使用 Numpy 数组的属性来表示图像的尺寸和通道信息,其中参数 img.shape 表示原始图像的形状,np.uint8 表示类型。

img=cv2.imread('lena.png')
#创建空图像,默认0全黑
emptyImage=np.zeros(img.shape,np.uint8)
#img.shape 为(500, 300, 3),它表示 500×300 像素的图像,3 表示这是一个 RGB 图像
#显示图像
cv2.imshow=np.zeros(img.shape,np.unit8)
#等待显示
cv2.waitKey(0)
cv2.destoryAllWindows()

OpenCV复制图像

#复制原有图像来获取一幅新图像,可以调用 copy()函数实现
#读取图像
img=cv2.imread('lena.png')
#创建空图像,默认0全黑
emptyImage=np.zeros(img.shape,np.uint8)
#复制图像
emptyImage2 = img.copy()
#显示图像
cv2.imshow("Demo1", img)
cv2.imshow("Demo2", emptyImage)
cv2.imshow("Demo3", emptyImage2)
#等待显示
cv2.waitKey(0)
cv2.destroyAllWindows()

在这里插入图片描述
OpenCV保存图像
retval = imwrite(filename, img[, params])

  • filename 表示要保存的路径及文件名
  • img 表示图像矩阵
  • params 表示特定格式保存的参数编码,默认值为空。对于 JPEG 图片,该参数(cv2.IMWRITE_JPEG_QUALITY)表示图像的质量,用 0-100 的整数表示,默认值为 95。对于 PNG 图片,该参数
    (cv2.IMWRITE_PNG_COMPRESSION)表示的是压缩级别,从 0 到 9,压缩级别越高,图像尺寸越小,默认级别为 3。对于 PPM、PGM 、 PBM 图 片 , 该 参 数 表 示 一 个 二 进 制 格 式 的 标 志
    (cv2.IMWRITE_PXM_BINARY)。注意,该类型为 Long,必须转换成 int。
import cv2
import numpy as np
img=cv2.imread('lena.png')
#显示图片
cv2.imshow('demo',img)
#保存图片jpg/png参数
cv2.imwrite('det1.jpg',img,[int(cv2.IMWRITE_JPEG_QUALITY),5])
cv2.imwrite("dst2.jpg", img, [int(cv2.IMWRITE_JPEG_QUALITY), 100]) 
cv2.imwrite("dst3.png", img, [int(cv2.IMWRITE_PNG_COMPRESSION), 0]) 
cv2.imwrite("dst4.png", img, [int(cv2.IMWRITE_PNG_COMPRESSION), 9])
#等待显示
cv2.waitKey(0)
cv2.destoryAllWindows()

在这里插入图片描述

  • 1
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值