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()
posted @ 2024-06-03 02:43  星空28  阅读(13)  评论(0编辑  收藏  举报