OpenCV--图片处理操作
彩色图像通道顺序是BGR
blue = img[78, 125, 0] # 蓝色通道
green = img[78, 125, 1] # 绿色通道
red = img[78, 125, 2] # 红色通道
修改像素
img[100, 99, 0] = 255 # 修改第0个通道
img[100, 99, 1] = 255 # 修改第1个通道
img[100, 99, 2] = 255 # 修改第2个通道
img[100:150, 99:120] = [255, 0, 0] # 修改第0个通道
灰度图像
img[88, 99] = 255
-----------------------
import cv2
import numpy as np
a = cv2.imread('./test1.png')
b = np.ones((101, 101, 3))
b = a[220:400, 250:350]
a[0:180, 0:100] = b
cv2.imshow('original', a)
cv2.waitKey(0) # 保持窗口打开,小于0等待键盘输入;大于0表示等待时间
cv2.destroyAllWindows() # 销毁窗口
-----------------------
通道拆分与合并
import cv2
import numpy as np
a = cv2.imread('./test1.png')
b = np.ones((101, 101, 3))
b = a[220:400, 250:350]
a[0:180, 0:100] = b
cv2.imshow('original', a)
b, g, r = cv2.split(a) # 拆分为bgr
b = cv2.split(a)[0] # 拆分为b
g = cv2.split(a)[1] # 拆分为g
r = cv2.split(a)[2] # 拆分为r
m = cv2.merge([b, g, r]) # 合并通道,注意通道合并的顺序
cv2.imshow('merge', m)
cv2.waitKey(0) # 保持窗口打开,小于0等待键盘输入;大于0表示等待时间
cv2.destroyAllWindows() # 销毁窗口
----------------------------
图片像素相加
import cv2
import numpy as np
a = cv2.imread('./test1.png')
b = a
add1 = a + b # 相加之后对255取余
add2 = cv2.add(a, b) # 相加之后最大取255
cv2.imshow("add1", add1)
cv2.imshow("add2", add2)
cv2.imshow('original', a)
cv2.waitKey(0) # 保持窗口打开,小于0等待键盘输入;大于0表示等待时间
cv2.destroyAllWindows() # 销毁窗口
----------------------------
图像融合
结果图像 = 图像1 * 系数1 + 图像2 * 系数2 + 亮度调节量
dst = cv2.addWeighted(src1, alpha, src2, beta, gamma)
src1: 图像1
alpha: 系数1
src2: 图像2
beta: 系数2
gamma: 亮度调节量
a = cv2.imread('./test1.png')
a.shape
a = a[0:397, 0:596, :]
b = cv2.imread('./test2.jpeg')
b.shape
result = cv2.addWeighted(a, 0.3, b, 0.7, 0)
cv2.imshow("a", a)
cv2.imshow("b", b)
cv2.imshow("result", result)
cv2.waitKey(0)
cv2.destroyAllWindows()
----------------------------
图像转换
import cv2
import numpy as np
a = cv2.imread('./test1.png', cv2.IMREAD_UNCHANGED)
b = cv2.cvtColor(a, cv2.COLOR_GRAY2BGR)
cv2.imshow('lena', a)
cv2.imshow('RGB', b)
# b = cv2.cvtColor(a, cv2.COLOR_BGR2RGB)
bb, bg, br = cv2.split(a)
cv2.imshow("bb", bb)
cv2.imshow("bg", bg)
cv2.imshow("br", br)
cv2.waitKey(0)
cv2.destroyAllWindows()
----------------------------
图像翻转
dst = cv2.flip(src, flipCode) flipCode=0沿x轴翻转,flipCode=1沿y轴翻转,flipCode=-1先沿x轴翻转再沿y轴翻转,
import cv2
a = cv2.imread('./test1.png')
b = cv2.flip(a, 0)
cv2.imshow('original', a)
cv2.imshow('flip', b)
cv2.waitKey(0)
cv2.destroyAllWindows()
----------------------------
阈值分割
retval, dst = cv2.threshold(src, thresh, maxval, type)
retval: 阈值
dst: 处理结果
src: 源图像
threshold: 阈值
maxval: 最大值
type: 类型 # 二进制阈值化cv2.THRESH_BINARY # 反二进制阈值化 # 阈值化 # 反阈值化为0 cv2.THRESH_TOZERO_INV
import cv2
o = cv2.imread('./lena512.png', cv2.IMREAD_UNCHANGED) # 读取灰度图
# r, b = cv2.threshold(o, 128, 255, cv2.THRESH_BINARY) # 二值化
# r2, b2 = cv2.threshold(o, 128, 255, cv2.THRESH_BINARY_INV) # 反二值化
# r, b = cv2.threshold(o, 128, 255, cv2.THRESH_TRUNC) # 截断
# r, b = cv2.threshold(o, 128, 255, cv2.THRESH_TOZERO) # 阈值化为0
r, b = cv2.threshold(o, 128, 255, cv2.THRESH_TOZERO_INV) # 反阈值化为0
cv2.imshow('original', o)
cv2.imshow('result', b)
# cv2.imshow('result2', b2)
cv2.waitKey(0)
cv2.destroyAllWindows()