Opencv 《图片特效:01 灰度处理》

Opencv 《图片特效:01 灰度处理》

介绍4种实现方式:

方法1


 1 # import cv2
 2 
 3 #
 4 # img0 = cv2.imread('test.jpg',0)      # 0代表灰色,1代表彩色
 5 # img1 = cv2.imread('test.jpg',1)      # 0代表灰色,1代表彩色
 6 # print(img0.shape)
 7 # print(img1.shape)
 8 # cv2.imshow('image0',img0)
 9 # cv2.imshow('image1',img1)
10 # cv2.waitKey(0)

方法2

1 #方法2  cvtColor
2 # import cv2
3 #
4 # img = cv2.imread('test.jpg',1)
5 # dst = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)  #转换为灰度图片 BGR ->GRAY
6 # cv2.imshow('image',dst)
7 # cv2.waitKey(0)

 


方法3
 1 #方法3  使用 GRAY = (R + G + B)/3 完成灰度处理
 2 # import cv2
 3 # import numpy as np
 4 #
 5 # img = cv2.imread('test.jpg',1)
 6 # imgInfo = img.shape
 7 # height = imgInfo[0]
 8 # width = imgInfo[1]
 9 # dst = np.zeros((height,width,3),np.uint8)
10 # for i in range(height):
11 #     for j in range(width):
12 #         (b,g,r) = img[i,j]
13 #         gray = (int(b) + int(g) +int(r))/3
14 #         dst[i,j] = np.uint8(gray)
15 # cv2.imshow('image',dst)
16 # cv2.waitKey(0)

方法4
 1 #方法4 心理学灰度计算公式 使用 GRAY = R * 0.299 + G * 0.587 + B * 0.114 完成灰度处理
 2 # import cv2
 3 # import numpy as np
 4 #
 5 # img = cv2.imread('test.jpg',1)
 6 # imgInfo = img.shape
 7 # height = imgInfo[0]
 8 # width = imgInfo[1]
 9 # dst = np.zeros((height,width,3),np.uint8)
10 # for i in range(height):
11 #     for j in range(width):
12 #         (b,g,r) = img[i,j]
13 #         gray = int(b) * 0.144 + int(g) * 0.587 +int(r) * 0.299
14 #         dst[i,j] = np.uint8(gray)
15 #
16 # cv2.imshow('image',dst)
17 # cv2.waitKey(0)
下面是算法优化部分

 算法优化

 1  1 # 算法优化
 2  2 # 定点》浮点  + - 》* /
 3  3 
 4  4 import cv2
 5  5 import numpy as np
 6  6 
 7  7 img = cv2.imread('test.jpg',1)
 8  8 imgInfo = img.shape
 9  9 height = imgInfo[0]
10 10 width = imgInfo[1]
11 11 dst = np.zeros((height,width,3),np.uint8)
12 12 for i in range(height):
13 13     for j in range(width):
14 14         (b,g,r) = img[i,j]
15 15         b=int(b)
16 16         g=int(b)
17 17         r=int(r)
18 18         # gray = (b*1+g*2+r*1)/4
19 19         gray = (b + (g <<1) + r ) >>2    # *2 左移一位  /4 右移两位
20 20         dst[i,j] = np.uint8(gray)
21 21 
22 22 cv2.imshow('image',dst)
23 23 cv2.waitKey(0)

 






posted @ 2020-03-27 11:28  数学程序猿  阅读(218)  评论(0)    收藏  举报