openCV笔记
图像
灰度图像
0代表纯黑色,255代表白色(类似亮度)
通道拆分
通过索引拆分:
import cv2
lena=cv2.imread("lenacolor.png")
cv2.imshow("lena1",lena)
b=lena[:,:,0]
g=lena[:,:,1]
r=lena[:,:,2]
cv2.imshow("b",b)
cv2.imshow("g",g)
cv2.imshow("r",r)
lena[:,:,0]=0
cv2.imshow("lenab0",lena)
lena[:,:,1]=0
cv2.imshow("lenab0g0",lena)
cv2.waitKey()
cv2.destroyAllWindows()
通过cv2.split()函数拆分:
import cv2
lena=cv2.imread("lenacolor.png")
b,g,r=cv2.split(lena)
cv2.imshow("B",b)
cv2.imshow("G",g)
cv2.imshow("R",r)
cv2.waitKey()
cv2.destroyAllWindows()
图像属性
获取图像属性
shape:如果是彩色图像,则返回包含行数、列数、通道数的数组;如果是二值图像或 者灰度图像,则仅返回行数和列数。通过该属性的返回值是否包含通道数,可以判断一 幅图像是灰度图像(或二值图像)还是彩色图像。
size:返回图像的像素数目。其值为“行×列×通道数”,灰度图像或者二值图像的通道 数为 1。
dtype:返回图像的数据类型。
如:
import cv2
gray=cv2.imread("lena.bmp",0)
color=cv2.imread("lenacolor.png")
print("图像 gray 属性:")
print("gray.shape=",gray.shape)
print("gray.size=",gray.size)
print("gray.dtype=",gray.dtype)
print("图像 color 属性:")
print("color.shape=",color.shape)
print("color.size=",color.size)
print("color.dtype=",color.dtype)
重置图像属性
import cv2 as cv
# 读入原图片
img = cv.imread('test.jpg')
# 打印出图片尺寸
print(img.shape)
# 将图片高和宽分别赋值给x,y
x, y = img.shape[0:2]
# 显示原图
cv.imshow('OriginalPicture', img)
# 缩放到原来的二分之一,输出尺寸格式为(宽,高)
img_test1 = cv.resize(img, (int(y / 2), int(x / 2)))
cv.imshow('resize0', img_test1)
cv.waitKey()
# 最近邻插值法缩放
# 缩放到原来的四分之一
img_test2 = cv.resize(img, (0, 0), fx=0.25, fy=0.25, interpolation=cv.INTER_NEAREST)
cv.imshow('resize1', img_test2)
cv.waitKey()
cv.destroyAllWindows()
图像运算
图像相加
直接加法运算:a+b=mod(a+b,256)
使用cv2.add:大于255则饱和
图像加权:使用cv2.addWeighted函数
dst=cv2.addWeighted(src1, alpha, src2, beta, gamma),其中gamma为亮度调节
图像位运算
按位与
dst = cv2.bitwise_and( src1, src2[, mask]] )
· 其中mask表示可选操作掩码,即指定要更改的输出数组的元素,也即输出图像像素只有mask对应位置元素不为0的部分才输出,否则 该位置像素的所有通道分量都设置为0
按位或
dst = cv2.bitwise_or( src1, src2[, mask]] )
按位非
dst = cv2.bitwise_not( src[, mask]] )
按位异或(与二进制加法类似)
dst = cv2.bitwise_xor( src1, src2[, mask]] )
位平面分解
提取某个位平面:
import cv2
import numpy as np
i = 5 #提取第五位平面
rose = cv2.imread("Rose.jpg",0)
x = np.ones(rose.shape, dtype=np.uint8)*(2**i)
result = cv2.bitwise_and(rose, x)
cv2.imshow("img",result)
cv2.waitKey(0)
提取位平面并进行阈值处理:
import cv2
import numpy as np
img = cv2.imread("1.jpg", 0)
cv2.imshow("rose",img)
r, c = img.shape
x = np.zeros((r, c, 8), dtype=np.uint8) #提取矩阵
for i in range(8):
x[:, :, i] = 2 ** i
r = np.zeros((r, c, 8), dtype=np.uint8) #存放8个位平面
for i in range(8):
r[:, :, i] = cv2.bitwise_and(img, x[:, :, i]) #提取位平面
img2 = cv2.bitwise_xor(r[:,:,6],r[:,:,7])
mask = r[:, :, i] > 0 #阈值处理
r[mask] = 255
mask = img2[:,:]>0
img2[mask] = 255
cv2.imshow("img",img2)
cv2.imshow("img0",r[:,:,7])
cv2.waitKey()
色彩空间
色彩空间基础
GRAY色彩空间
GRAY(灰度图像)通常指 8 位灰度图,其具有 256 个灰度级,像素值的范围是[0,255]。 当图像由 RGB 色彩空间转换为 GRAY 色彩空间时,其处理方式如下:
Gray = 0.299 ·
标签:src,img,python,cv2,dst,滤波,笔记,opencv,图像 From: https://www.cnblogs.com/Asaka-QianXiang/p/17216334.html