利用numpy内置的索引使用numpy原生的方法,性能会比opencv中的要好 。我们直接使用numpy的ndarray的索引的方法 。
例如 canvas[:,:,0] 选中的是所有行,所有列,像素元素的第一个值,也就是,所有B通道的值 。
然后对其进行赋值:
canvas[:,:,0] = color[0]1复制代码完整版本的函数如下,B/G/R通道分别进行赋值:
def init_canvas(width, height, color=(255, 255, 255)):canvas = np.ones((height, width, 3), dtype="uint8")# Bluecanvas[:,:,0] = color[0]# Greencanvas[:,:,1] = color[1]# Redcanvas[:,:,2] = color[2]return canvas12345678910复制代码具体实现代码如下:
'''初始化画布'''import cv2import numpy as npdef init_canvas(width, height, color=(255, 255, 255)):canvas = np.ones((height, width, 3), dtype="uint8")# Bluecanvas[:,:,0] = color[0]# Greencanvas[:,:,1] = color[1]# Redcanvas[:,:,2] = color[2]return canvascanvas = init_canvas(200, 200, color=(125, 100, 255))cv2.imshow('canvas', canvas)cv2.waitKey(0)cv2.destroyAllWindows()1234567891011121314151617181920212223复制代码运行实现的效果和第一种方法一样:
文章插图
实际上我们还有更快的方法, 可以实现这个功能, 这就需要你熟练掌握Numpy的使用技巧.
我们可以直接赋值color
canvas[:] = color1复制代码完整实现过程如下:
'''初始化画布'''import cv2import numpy as npdef init_canvas(width, height, color=(255, 255, 255)):canvas = np.ones((height, width, 3), dtype="uint8")canvas[:] = colorreturn canvascanvas = init_canvas(200, 200, color=(125, 40, 255))cv2.imshow('canvas', canvas)cv2.waitKey(0)cv2.destroyAllWindows()1234567891011121314151617复制代码运行的效果:
文章插图
综合实验-初始化背景在这个综合实验里会分别用上述的方法,创建黑色背景,白色背景,彩色背景 。
具体代码如下:
'''初始化一个空白的画布并指定画布的颜色'''import cv2import numpy as np# 初始化一个空画布 300×300 三通道 背景色为黑色 canvas_black = np.zeros((300, 300, 3), dtype="uint8")cv2.imshow("canvas_black", canvas_black)# 初始化一个空画布 300×300 三通道 背景色为白色 canvas_white = np.ones((300, 300, 3), dtype="uint8")canvas_white *= 255cv2.imshow("canvas_white", canvas_white)'''初始化一个彩色的画布 - cv2版本此函数使用 cv2.split 非常耗时 所以只有在需要的时候才能做到 。否则用Numpy索引 。'''def InitCanvasV1(width, height, color=(255, 255, 255)):canvas = np.ones((height, width, 3), dtype="uint8")# 将原来的三个通道抽离出来,分别乘上各个通道的值(channel_b, channel_g, channel_r) = cv2.split(canvas)# 颜色的值与个通道的全1矩阵相乘channel_b *= color[0]channel_g *= color[1]channel_r *= color[2]# cv.merge 合并三个通道的值return cv2.merge([channel_b, channel_g, channel_r])'''初始化一个彩色的画布 - numpy版本使用numpy的索引 赋值'''def InitCanvasV2(width, height, color=(255, 255, 255)):canvas = np.ones((height, width, 3), dtype="uint8")# Bluecanvas[:,:,0] = color[0]# Greencanvas[:,:,1] = color[1]# Redcanvas[:,:,2] = color[2]return canvas'''初始化终极版本熟练掌握 numpy 才可以提高工作效率哦'''def InitCanvasV3(width, height, color=(255, 255, 255)):canvas = np.ones((height, width, 3), dtype="uint8")canvas[:] = colorreturn canvas# 初始化一个彩色的画布canvas_color = InitCanvasV2(300, 300, color=(100, 20, 50))cv2.imshow("canvas_color", canvas_color)# 等待e键按下 关闭所有窗口while cv2.waitKey(0) != ord('e'):continuecv2.destroyAllWindows()12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970复制代码运行结果:
- 男生短发染什么颜色显白 短发能染发吗
- 华为mate30 pro 翡冷翠,华为mate 30 pro哪款颜色最好看
- 染发颜色橘色系 脏橘色染发配方
- 白色衣服配黑色裤子 白色的裤子配什么颜色的上衣好看
- 形容山颜色丰富的成语
- 虎皮鸡爪最简单做法 凉拌鸡爪怎么上色颜色好看
- 我的世界拥有三个女仆而且还是合成出来的每个不同颜色
- 奶油生日蛋糕奶油的颜色怎么做的
- 拍照穿什么颜色上镜 适合秋天拍照的衣服
- 怎么样炸扣肉皮才上色 扣肉怎么做颜色好看