创造一张图
- 长400,宽400,三通道图。色彩值(0,0,255),红色。
- 长400,宽400,单通道图。色彩值127,灰色。
import cv2 as cv
def create_image():
img = np.zeros([400, 400, 3], np.uint8)
img[:, :, 2] = np.ones([400, 400])*255
cv.imshow("new image",img)
img = np.zeros([400, 400, 1], np.uint8)
img[:, :, 0] = np.ones([400, 400]) * 127
cv.imshow("new image", img)
numpy的一些基础用法
import numpy as np
mt = np.ones([3, 3], np.uint8)
mt.fill(122.388)
print(mt)
"""
[[122 122 122]
[122 122 122]
[122 122 122]]
"""
通道分离与合并
- cv.split()
- cv.merge()
合并单通道成为多通道,而不能多通道合并。
src = cv.imread("test.png") # blue, green, red
cv.namedWindow("input image", cv.WINDOW_AUTOSIZE)
# cv.imshow("input image", src)
b, g, r = cv.split(src)
cv.imshow("blue", b)
cv.imshow("green", g)
cv.imshow("red", r)
# 恢复原图
# src = cv.merge([r, g, b])
CPP
bool split3channels()
{
vector<Mat> channels;
Mat srcImage = imread("/Users/sxt/Downloads/17/mogu.jpg");
split(srcImage, channels);
Mat blueChannles = channels.at(0);
Mat greenChannels = channels.at(1);
Mat redChannels = channels.at(2);
}
结果全是单通道图片。
带颜色的是三通道图片,在split分离出的图像基础上,扩展另外两个通道(为0)。
如下:
# 生成一个值为0的单通道数组
zeros = np.zeros(image.shape[:2], dtype = "uint8")
# 分别扩展B、G、R成为三通道。另外两个通道用上面的值为0的数组填充
cv2.imshow("Blue", cv2.merge([B, zeros, zeros]))
cv2.imshow("Green", cv2.merge([zeros, G, zeros]))
cv2.imshow("Red", cv2.merge([zeros, zeros, R]))
cv2.waitKey(0)
或
src[:, :, 0] = 0
src[:, :, 1] = 0
cv.imshow("Red src", src)
Python运算时间
t1 = cv.getTickCount()
t2 = cv.getTickCount()
time = (t2 - t1) / cv.getTickFrequency()
生成灰度图并且写入
单通道
src = cv.imread("test.png") # blue, green, red
cv.namedWindow("input image", cv.WINDOW_AUTOSIZE)
gray = cv.cvtColor(src, cv.COLOR_BGR2GRAY)
cv.imwrite("result1.png", gray)
cv.waitKey(0)
cv.destroyAllWindows()