OpenCV-Python图像通道的拆分和合并
简介OpenCV-Python图像通道的拆分和合并,主要介绍两个函数:一、拆分通道使用函数cv2.split;二、合并通道使用函数cv2.merge,但是一定要注意合并通道的顺序问题,OpenCV是GBR,不是RGB,如果顺序不是GBR,合并出来的图像就会出现颜色问题,与原图的颜色就不一致了.
一、通道的拆分
数组下标形式的拆分,代码如下:
# -*- coding: utf-8 -*-
# Data: 2023/7/2
import cv2
img1 = cv2.imread("./1-1.jpg",cv2.IMREAD_UNCHANGED)
b = img1[:,:,0]
g = img1[:,:,1]
r = img1[:,:,2]
cv2.imshow("img",img1)
cv2.imshow("img-B",b)
cv2.imshow("img-G",g)
cv2.imshow("img-R",r)
cv2.waitKey(0)
cv2.destroyAllWindows()
使用split函数进行拆分:
# -*- coding: utf-8 -*-
# Data: 2023/7/2
import cv2
img1 = cv2.imread("./1-1.jpg", cv2.IMREAD_UNCHANGED)
b, g, r = cv2.split(img1)
cv2.imshow("img", img1)
cv2.imshow("img-B", b)
cv2.imshow("img-G", g)
cv2.imshow("img-R", r)
cv2.waitKey(0)
cv2.destroyAllWindows()
效果与上面的一样
我们如果只想用split取一个通道,可以在split函数后面给下标:
b = cv2.split(a)[0]
g = cv2.split(a)[1]
r = cv2.split(a)[2]
二、合并通道
合并通道使用merge函数,一定要注意,里面是数组写法,顺序是g,b,r,而不是r,g,b,示例:
# -*- coding: utf-8 -*-
# Data: 2023/7/2
import cv2
img1 = cv2.imread("./1-1.jpg", cv2.IMREAD_UNCHANGED)
b, g, r = cv2.split(img1)
cv2.imshow("img", img1)
m = cv2.merge([b,g,r])
cv2.imshow("merge-bgr",m)
m2 = cv2.merge([r,g,b])
cv2.imshow("merge-rgb",m2)
cv2.waitKey(0)
cv2.destroyAllWindows()

g,b,r顺序才与原图一致。
下面演示下,合并其中一个通道,其他通道的值都是0的图片:
# -*- coding: utf-8 -*-
# Data: 2023/7/2
import cv2
import numpy as np
img1 = cv2.imread("./1-1.jpg", cv2.IMREAD_UNCHANGED)
rows, cols, chn = img1.shape
b1 = cv2.split(img1)[0]
g1 = np.zeros((rows, cols), img1.dtype)
r1 = np.zeros((rows, cols), img1.dtype)
m1 = cv2.merge([b1, g1, r1])
cv2.imshow("m-1", m1)
b2 = np.zeros((rows, cols), img1.dtype)
g2 = cv2.split(img1)[1]
r2 = np.zeros((rows, cols), img1.dtype)
m2 = cv2.merge([b2, g2, r2])
cv2.imshow("m-2", m2)
b3 = np.zeros((rows, cols), img1.dtype)
g3 = np.zeros((rows, cols), img1.dtype)
r3 = cv2.split(img1)[2]
m3 = cv2.merge([b3, g3, r3])
cv2.imshow("m-3", m3)
cv2.waitKey(0)
cv2.destroyAllWindows()

图像梯度计算的是图像变化的速度。对于图像的边缘部分,其灰度值变化较大,梯度值也较大;相反,对于图像中比较平滑的部分,其灰度值变化较小,相应的梯度值也较小。图像梯度计算需要求导数,但是图像梯度一般通过计算像素值的差来得到梯度的近似值(近似导数值)。本节主要介绍Sobel算子、Scharr算子、Laplacian算子和Canny算子的使用.
图标组件是展示图标的组件,但是再Flutter中,Icon组件是只是起一个展示效果,不能进行交互,如果要实现交互,就需要使用图标按钮IconButton组件。
网页扫描二维码库:Html5-Qrcode,官网地址:https://scanapp.org/html5-qrcode-docs/
某些时候在寻找某个接口反映较慢的排除方法,除了从网络和服务器的硬件上面排除外,可能还需要我们通过PHP-FPM来排查问题。所以本文我们将说明如何通过PHP-FPM来查询慢日志,帮我们来排查相关问题。
迪米特法则(Law of Demeter,LoD)又叫作最少知识原则(Least Knowledge Principle,LKP),产生于 1987 年美国东北大学(Northeastern University)的一个名为迪米特(Demeter)的研究项目,由伊恩·荷兰(Ian Holland)提出,被 UML 创始者之一的布奇(Booch)普及,后来又因为在经典著作《程序员修炼之道》(The Pragmatic Programmer)提及而广为人知。
快速生成表格
Electron页面跳转、浏览器打开链接和打开新窗口
Docker编译镜像出现:fetch http://dl-cdn.alpinelinux.org/alpine/v3.12/main/x86_64/APKINDEX.tar.gz
ERROR: http://dl-cdn.alpinelinux.org/alpine/v3.12/main: temporary error (try again later)
WARNING: Ignoring APKINDEX.2c4ac24e.tar.gz: No such file or directory问题
在Mac电脑中,如何对Git的用户名和密码进行修改呢?起初不懂Mac,所以整了很久,本文将记录如何对这个进行操作,以便后期使用。
在使用Git的过程中,不想每次都输入用户名和密码去拉取代码,所以就需要保存这些信息,那么既然有保存了,就必须有清除功能。