02-图像处理入门基础
图像是由一个个像素构成的
我们所说的图像,通常分为二值图像、灰度图像、RGB图像
二值图像:图像当中的每个像素点,只能取0或255,其中0为黑,255为白
灰度图像:图像当中的每个像素点,可以取最暗黑色到最亮的白色的灰度之间256级灰度,其中二值图像和灰度图像都是单通道图片
RGB图像:图像当中的每个像素由R、G、B三个分量表示,即RGB三通道彩色图片,其中每个通道取值范围0-255之间
import cv2 # 彩色图片转换为灰度图 src = cv2.imread(r"image\lenacolor.png",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(r"image\lenacolor.png",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(r"image\lenacolor.png",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(r"image\lenacolor.png",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(r"image\lenacolor.png",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(r"image\lenacolor.png",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(r"image\lenacolor.png",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(r"image\lenacolor.png",cv2.IMREAD_COLOR) #读取图片 cv2.imshow("src",src) # 提取ROI感兴趣区域 face = np.zeros((180,180,3)) face=src[220:400,220:400] 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[220:400,220:400]=backface cv2.imshow("backface",src) cv2.waitKey(0) cv2.destroyAllWindows()
通道的拆分与合并
1.拆分通道
2.合并通道
import cv2 img = cv2.imread(r"image\lenacolor.png",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()
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 零经验选手,Compose 一天开发一款小游戏!
· 一起来玩mcp_server_sqlite,让AI帮你做增删改查!!