02-图像处理入门基础

时间:2021-09-06
本文章向大家介绍02-图像处理入门基础,主要包括02-图像处理入门基础使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。

图像是由一个个像素构成的

我们所说的图像,通常分为二值图像、灰度图像、RGB图像

二值图像:图像当中的每个像素点,只能取0或255,其中0为黑,255为白
灰度图像:图像当中的每个像素点,可以取最暗黑色到最亮的白色的灰度之间256级灰度,其中二值图像和灰度图像都是单通道图片
RGB图像:图像当中的每个像素由R、G、B三个分量表示,即RGB三通道彩色图片,其中每个通道取值范围0-255之间

import cv2

# 彩色图片转换为灰度图
src = cv2.imread("image.jpg",cv2.IMREAD_COLOR)
cv2.imshow("original",src)

img_gray = cv2.cvtColor(src,cv2.COLOR_BGR2GRAY)   
cv2.imshow("img_gray",img_gray)

# 灰度图转彩色图片(这里其实是将灰度图像的单通道变为三通道,没有变为original的原始图像,整体图像还是灰色的)
img_rgb = cv2.cvtColor(img_gray,cv2.COLOR_GRAY2BGR)
cv2.imshow("img_rgb",img_rgb)

cv2.waitKey(0)
cv2.destroyAllWindows()

像素处理
1.读取像素
返回值 = 图像(位置参数)
1> 灰度图像,返回灰度值
2> RGB图像,返回值为B,G,R的值(这是因为,RGB图像中的实际通道顺序是BGR)

2.修改像素值
图像(位置参数) = 修改的值

import cv2

# 1.灰度图
# cv.IMREAD_GRAYSCALE:以灰度模式加载图像
img_gray=cv2.imread("image.jpg",cv2.IMREAD_GRAYSCALE)

# 读取像素,返回图像第3行第10列的灰度值
p = img_gray[3,10]
print("灰度图中第3行第10列的灰度值:",p)

# 修改像素值
img_gray[3,10] = 100
print("修改像素值后,灰度图中第3行第10列的灰度值:",img_gray[3,10],end="\n\n")

# 2,RGB图像
# cv2.IMREAD_COLOR:加载彩色图像。任何图像的透明度都会被忽视,它是默认标志
img = cv2.imread("image.jpg",cv2.IMREAD_COLOR)

# 读取像素,返回图像第3行第10列的B,G,R的值
blue = img[3,10,0]
green = img[3,10,1]
red = img[3,10,2]
print("RGB图像中第3行第10列的B,G,R分别为:",blue,green,red)

# 修改像素值
img[3,10]  = [100,100,100]
print("修改像素值后,RGB图像中第3行第10列的B,G,R分别为:",img[3,10,0],img[3,10,1],img[3,10,2])

使用numpy进行像素处理
Numpy(Numerical Python)是一个开源的Python科学计算库,用于快速处理任意维度的数组
安装:pip install numpy

1.读取像素
返回值 = 图像.item(位置参数)
1> 灰度图像,返回灰度值
2> RGB图像,返回值为B,G,R的值(这是因为,RGB图像中的实际通道顺序是BGR)

2.修改像素值
图像名.itemset(位置参数,新值)

import numpy as np
import cv2

# 1.灰度图
# cv.IMREAD_GRAYSCALE:以灰度模式加载图像
img_gray=cv2.imread("image.jpg",cv2.IMREAD_GRAYSCALE)

# 读取像素,返回图像第3行第10列的灰度值
p = img_gray.item(3,10)
print("灰度图中第3行第10列的灰度值:",p)

# 修改像素值
img_gray.itemset((3,10),100)
print("修改像素值后,灰度图中第3行第10列的灰度值:",img_gray.item(3,10),end="\n\n")

# 2,RGB图像
# cv2.IMREAD_COLOR:加载彩色图像。任何图像的透明度都会被忽视,它是默认标志
img = cv2.imread("image.jpg",cv2.IMREAD_COLOR)

# 读取像素,返回图像第3行第10列的B,G,R的值
blue = img.item(3,10,0)
green =  img.item(3,10,1)
red = img.item(3,10,2)
print("RGB图像中第3行第10列的B,G,R分别为:",blue,green,red)

# 修改像素值
img.itemset((3,10,0),100)
img.itemset((3,10,1),100)
img.itemset((3,10,2),100)
print("修改像素值后,RGB图像中第3行第10列的B,G,R分别为:",img.item(3,10,0),img.item(3,10,1),img.item(3,10,2)

获取图像属性
1.形状:行、列、通道数
通过图像名.shape获取图像的形状,返回包括行数,列数,通道数的元组
1> 灰度图像,返回行数、列数
2> 彩色图像,返回行数、列数、通道数

2.像素数目
通过图像名.size获取图像的像素数目
1> 灰度图像,返回行数*列数
2> 彩色图像,返回行数*列数*通道数

3.图像的数据类型
通过图像名.dtype获取当前图像的数据类型

import cv2

# 1.灰度图
# cv.IMREAD_GRAYSCALE:以灰度模式加载图像
img_gray=cv2.imread("image.jpg",cv2.IMREAD_GRAYSCALE)

# 获取图像的形状
print("灰度图的形状",img_gray.shape)
# 获取图像的像素数目
print("灰度图的像素数目",img_gray.size)
# 获取图像的数据类型
print("灰度图的数据类型",img_gray.dtype,end="\n\n")

# 2,RGB图像
# cv2.IMREAD_COLOR:加载彩色图像。任何图像的透明度都会被忽视,它是默认标志
img = cv2.imread("image.jpg",cv2.IMREAD_COLOR)

# 获取图像的形状
print("RGB彩色图的形状",img.shape)
# 获取图像的像素数目
print("RGB彩色图的像素数目",img.size)
# 获取图像的数据类型
print("RGB彩色图的数据类型",img.dtype)

图像ROI,感兴趣区域
在图像处理领域,我们常常需要设置感兴趣区域(ROI,region of interest),这个区域就是图像分析所关注的焦点,这样以便进行进一步处理,可以大大减少处理时间

定义ROI区域有两种方法
1> 使用表示矩形的区域React,它指定矩形的左上角坐标和矩形的长宽
2> 指定感兴趣行或列的范围(Range),Range是指从起始索引到终止索引(不包括终止索引)的一连段连续序列

import cv2
import numpy as np
 
# 读取图片
src=cv2.imread("test.jpg",cv2.IMREAD_COLOR)  #读取图片
cv2.imshow("src",src)     
 
# 提取ROI感兴趣区域
face = np.zeros((80,80,3))
face=src[10:90,70:150]
cv2.imshow("face",face)   

# 将上述提取的ROI区域,RGB彩色图转换为灰度图
gray=cv2.cvtColor(face,cv2.COLOR_BGR2GRAY)   
cv2.imshow("gray",gray)   

# 将上述ROI区域的灰度图转化为RGB彩色图
backface=cv2.cvtColor(gray,cv2.COLOR_GRAY2BGR)  

# 原图的ROI感兴趣区域进行替换
src[10:90,70:150]=backface   
cv2.imshow("backface",src)   

cv2.waitKey(0)
cv2.destroyAllWindows()

通道的拆分与合并
1.拆分通道
2.合并通道

import cv2

img = cv2.imread("image.jpg",cv2.IMREAD_COLOR)

# 拆分通道
# b,g,r = cv2.split(img)
b = img[:,:,0]
g = img[:,:,1]
r = img[:,:,2]

cv2.imshow("B",b)
cv2.imshow("G",g)
cv2.imshow("R",r)

cv2.waitKey(0)
cv2.destroyAllWindows()

# 合并通道
rgb_img = cv2.merge([r,g,b])
bgr_img = cv2.merge((b,g,r))

cv2.imshow("RGB",rgb_img)
cv2.imshow("BGR",bgr_img)
cv2.waitKey(0)
cv2.destroyAllWindows()

原文地址:https://www.cnblogs.com/REN-Murphy/p/15235857.html