OpenCV-Python快速入门(二):图像基础
前言
- 本文是个人快速入门OpenCV-Python的电子笔记,由于水平有限,难免出现错漏,敬请批评改正。
- 更多精彩内容,可点击进入
OpenCV-Python快速入门专栏或我的个人主页查看
前提条件
- 熟悉Python
实验环境
- Python 3.x (面向对象的高级语言)
- OpenCV 4.0(python第三方库)
pip3 install opencv-python
图像基础
二值图像、灰度图像、彩色图像
- 二值图像是指仅仅包含黑色(0)和白色(1)两种颜色的图像。
- 灰度图像又称灰阶图。把白色与黑色之间按对数关系分为若干等级,称为灰度。灰度分为256阶,即256 个灰度级,用数值区间[0, 255]来表示。其中,数值“255”表示纯白色,数值“0”表示纯黑色,其余的数值表示从纯白到纯黑之间不同级别的灰度。
- 彩色图像是指每个像素由R、G、B分量构成的图像,其中R、G、B是由不同的灰度级来描述的。
修改灰度图像素
import cv2
img=cv2.imread("1.jpg",0)
cv2.imshow("origin",img)
for i in range(10,100):
for j in range(80,100):
img[i,j]=255
cv2.imshow("alter",img)
cv2.waitKey()
cv2.destroyAllWindows()
修改彩色图像素
import cv2
img=cv2.imread("1.jpg")
cv2.imshow("origin",img)
# 访问 img 中第 0 行第 0 列位置上的 B 通道、G 通道、R 通道三个像素点
print("访问 img[0,0]=",img[0,0])
# 访问 img 中第 0 行第 0 列位置上的 B 通道
print("访问 img[0,0,0]=",img[0,0,0])
# 访问 img 中第 0 行第 0 列位置上的 G 通道
print("访问 img[0,0,1]=",img[0,0,1])
# 访问 img 中第 0 行第 0 列位置上的 R 通道
print("访问 img[0,0,2]=",img[0,0,2])
#修改指定位置为黑色区域
for i in range(0,50):
for j in range(0,100):
for k in range(0,3):
img[i,j,k]=0 #黑色
#修改指定位置为绿色区域
for i in range(50,100):
for j in range(0,100):
img[i,j]=[0,255,0] #绿色
#修改指定位置为白色区域
for i in range(100,150):
for j in range(0,100):
img[i,j]=255 # 白色
cv2.imshow("alter",img)
cv2.waitKey()
cv2.destroyAllWindows()
Numpy处理像素
import numpy as np
import cv2
# 随机生成一幅 400×400 大小的灰度图像
img=np.random.randint(0,256,size=[400,400],dtype=np.uint8)
print(img)
print(img.shape)
cv2.imshow("img",img)
cv2.waitKey()
cv2.destroyAllWindows()
import cv2
import numpy as np
# 随机生成一幅 256×256×3 的彩色图像
img=np.random.randint(0,256,size=[400,400,3],dtype=np.uint8)
cv2.imshow("img",img)
cv2.waitKey()
cv2.destroyAllWindows()
感兴趣区域ROI
import cv2
img=cv2.imread("3.jpg")\
# 取原图像高68像素到450像素,宽取30像素到450像素
cat=img[20:450,68:450] # ROI
cv2.imshow("origin",img)
cv2.imshow("cat",cat)
cv2.waitKey()
cv2.destroyAllWindows()
通道拆分
import cv2
img=cv2.imread("1.jpg")
b,g,r=cv2.split(img)
cv2.imshow("B",b)
cv2.imshow("G",g)
cv2.imshow("R",r)
# 或者
# b=img[:,:,0]
# g=img[:,:,1]
# r=img[:,:,2]
# cv2.imshow("B",b)
# cv2.imshow("G",g)
# cv2.imshow("R",r)
cv2.waitKey()
cv2.destroyAllWindows()
通道合并
import cv2
img=cv2.imread("1.jpg")
b,g,r=cv2.split(img)
BGR=cv2.merge([b,g,r])
RGB=cv2.merge([r,g,b])
cv2.imshow("img",img)
cv2.imshow("BGR",BGR)
cv2.imshow("RGB",RGB)
cv2.waitKey()
cv2.destroyAllWindows()
注意:OpenCV是以BGR模式的三维数组形式存储
图像属性
import cv2
img=cv2.imread("1.jpg")
img_gray=cv2.imread("1.jpg",0)
print("彩色图像属性:")
print("img.shape=",img.shape)
print("img.size=",img.size)
print("img.dtype=",img.dtype)
print("灰度图像属性:")
print("img_gray.shape=",img_gray.shape)
print("img_gray.size=",img_gray.size)
print("img_gray.dtype=",img_gray.dtype)
参考文献
[1] https://opencv.org/
- 更多精彩内容,可点击进入
OpenCV-Python快速入门专栏或我的个人主页查看