图像的基础操作
来源:互联网 发布:数据分析合同 编辑:程序博客网 时间:2024/06/12 00:37
一. 获取并修改像素值
import cv2import numpy as npimg = cv2.imread("E://dog.jpg")#根据像素的行和列的坐标获取他的像素值。对 BGR 图像而言,返回值为 B, G, R 的值。对灰度图像而言,会返回他的灰度值print(img[100,100]) #[ 60 114 125]print(img.item(100,100,2)) #125img.itemset((100,100,2),25)print(img.item(100,100,2)) #25
二. 获取图像属性
1.. img.shape 可以获取图像的形状。他的返回值是一个包含行数,列数,通道数的元组。
img = cv2.imread("E://dog.jpg")print(img.shape) #(640, 640, 3)
如果图像是灰度图,返回值仅有行数和列数。所以通过检查这个返回值就可以知道加载的是灰度图还是彩色图。
2.. img.size 可以返回图像的像素数目。
print(img.size) #1228800
3.. img.dtype 返回的是图像的数据类型。
print(img.dtype) #uint8
三. 图像ROI
ROI(Region of Interest)是指图像中的一个矩形区域,可能你后续的程序需要单独处理这一个小区域。如果你对图像设置了ROI,那么,opencv的大多数函数只在该ROI区域内运算(只处理该ROI区域),如果没设ROI的话,就会出来整幅图像。
import cv2import numpy as npimg = cv2.imread("E://dog.jpg")ballImg = img[380:520,230:350] #利用numpy中的数组切片设置ROI区域img[0:140,0:120] = ballImg #将设置的ROI区域添加到原图像的左上方cv2.namedWindow("Image")cv2.imshow("Image", img)cv2.waitKey(0)
四. 拆分及合并图像通道
有时我们需要对 BGR 三个通道分别进行操作。这是你就需要把 BGR 拆分成单个通道。
1..第一种方法:使用OpenCV自带的split 函数
import cv2import numpy as npimg = cv2.imread("E://dog.jpg")b,g,r = cv2.split(img)cv2.imshow("blue", b)cv2.imshow("green", g)cv2.imshow("red", r)cv2.waitKey(0)
2..第二种方法:使用Numpy数组来分离通道
import cv2import numpy as npimg = cv2.imread("E://dog.jpg")# 创建3个跟图像一样大小的矩阵,数值全部为0b = np.zeros((img.shape[0],img.shape[1]),dtype=img.dtype)g = np.zeros((img.shape[0],img.shape[1]),dtype=img.dtype)r = np.zeros((img.shape[0],img.shape[1]),dtype=img.dtype)#复制图像通道里的数据 b[:,:] = img[:,:,0]g[:,:] = img[:,:,1]r[:,:] = img[:,:,2]
cv2.split() 是一个比较耗时的操作。只有真正需要时才用它,能用Numpy 索引就尽量用。
有时你需要把独立通道的图片合并成一个 BGR 图像。
img = cv2.merge([r,g,b]) #将BGR图像以RGB的顺序显示
五. 绘图函数
1) 画线
cv2.line(img,pt1,pt2,color,thickness)
img:你想要绘制图形的那幅图像。
pt1,pt2:线段的起点和终点
color:线条的颜色。以 RGB 为例,需要传入一个元组,例如:(255,0,0)代表蓝色。对于灰度图只需要传入灰度值。
thickness:线条的粗细。如果给一个闭合图形设置为 -1,那么这个图形就会被填充。默认值是 1.
2) 画矩形
cv2.rectangle(img,pt1,pt2,color,thickness)
pt1,pt2分别表示矩形的左上端点和右下端点
3) 画圆
cv2.circle(img,center,radius,color)
4) 添加文字
cv2.putText(img,str,ptr,fontFace,fontScale,color)
fontFace,fontScale分别为字体的类型和大小,类型可查阅字体集
import cv2import numpy as npimg = np.zeros((512,512,3), np.uint8)cv2.line(img,(0,0),(512,300),(255,0,0),5) #直线cv2.line(img,(512,0),(0,300),(255,0,0),5) #直线cv2.rectangle(img,(0,0),(512,300),(0,0,255),5) #矩形cv2.circle(img,(256,150),80,(0,255,0)) #圆font = cv2.FONT_HERSHEY_COMPLEXcv2.putText(img,'Opencv',(10,400),font,4,(50,50,50)) #文字cv2.imshow('img',img) cv2.waitKey(0)
- 图像的基础操作
- Python针对图像的基础操作
- Mathematica图像操作基础
- 操作图像1-计算机图像基础
- opencv 学习第二天 图片图像的基础操作
- opencv基础操作及图像的卷积与滤波
- OpenCV学习笔记6-图像的基础操作
- OpenCV-Python——图像的基础操作
- 位图图像操作基础(一)
- 图像的ROI操作
- 图像的基本操作
- 图像的预处理操作
- 图像的阈值操作
- 图像的平移操作
- 图像的旋转操作
- halcon学习基础-图像基本操作
- 图像基础操作(含代码)
- 【openCV】二值图像基础操作
- Linux中Shutdown命令实现定时自动关机
- JavaWeb项目实现文件上传动态显示进度
- 【Spring】Spring MVC入门
- 以后不在这里更新博文了~
- 做程序员很美妙!
- 图像的基础操作
- 贪心+字符串排序——拼数
- Node.js全局对象
- 递归法实现汉诺塔
- Dubbo与Zookeeper、SpringMVC整合和使用(负载均衡、容错)
- sqlite 数据库实操
- 青岛往事(三)
- SpringMVC学习笔记(一)-概述、HelloWorld、@RequestMapping、@RequestParam
- Hive 窗口函数(Windowing Functions)