OpenCV技能树OpenCV基础IO与GUI
一只甲壳虫想组个乐队,但是临时找不到队友。请使用 OpenCV 读取下面的彩色甲壳虫图片 ‘bug.jpg’,帮助他变身灰色甲壳虫,然后完成组队。
显示甲壳虫乐队并写入到 ‘bug_band.jpg’:
import numpy as np
import cv2
if __name__ == '__main__':
bug_img = cv2.imread("bug.jpg")
bug_img1 = bug_img.copy()
bug_img_gray = cv2.cvtColor(bug_img1, cv2.COLOR_BGR2GRAY)
bug_img_gray_by_BGR_space = np.zeros_like(bug_img1)
bug_img_gray_by_BGR_space[:, :, 0] = bug_img_gray
bug_img_gray_by_BGR_space[:, :, 1] = bug_img_gray
bug_img_gray_by_BGR_space[:, :, 2] = bug_img_gray
bug_img_concat = np.concatenate((bug_img, bug_img_gray_by_BGR_space), axis=1)
cv2.imwrite("bug_band.jpg", bug_img_concat)
cv2.imshow('甲壳虫乐队', bug_img_concat)
cv2.waitKey(0)
cv2.destroyAllWindows()
# import numpy as np
# import cv2
#
# if __name__ == '__main__':
# bug_img = cv2.imread("bug.jpg")
# bug_img_gray = cv2.cvtColor(bug_img, cv2.COLOR_BGR2GRAY)
#
# bug_img_gray_by_BGR_space = cv2.cvtColor(bug_img_gray, cv2.COLOR_GRAY2BGR)
#
# bug_img_concat = np.concatenate(
# (bug_img, bug_img_gray_by_BGR_space),
# axis=1
# )
# cv2.imwrite("bug_band.jpg", bug_img_concat)
#
# cv2.imshow('甲壳虫乐队', bug_img_concat)
#
# cv2.waitKey(0)
# cv2.destroyAllWindows()
这两者是等价的
因为灰度图是单通道,所以无法直接进行合并为一个图像。
用灰度图的单通道,分别赋值给三通道,这样维度相同就可以合并成一个图像了。
以下是两种合并方法,第一种是opencv官方的通道赋值,另一种是我写的。
# bug_img_gray是单通道的灰度图
# 直接赋值给3个通道
bug_img_gray_by_BGR_space = cv2.cvtColor(bug_img_gray, cv2.COLOR_GRAY2BGR)
# 给每个通道赋值
bug_img_gray_by_BGR_space = np.zeros_like(bug_img1)
bug_img_gray_by_BGR_space[:, :, 0] = bug_img_gray
bug_img_gray_by_BGR_space[:, :, 1] = bug_img_gray
bug_img_gray_by_BGR_space[:, :, 2] = bug_img_gray