python rgb2gray 将rgb图像转换为gray图像

import numpy as np
import cv2

def bgr2gray(rgb):
    return np.dot(rgb, [0.114, 0.587, 0.299]).astype(np.uint8)

img=np.random.randint(0,256, size=[4,4,3], dtype=np.uint8)
rst=cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)

print("像素点(0,0)直接计算得到的值=",
img[0,0,0]*0.114+img[0,0,1]*0.587+img[0,0,2]*0.299)
print("像素点(0,0)使用公式cv2.cvtColor()转换值=", rst[0,0])

gray=bgr2gray(img)
print('像素点(0,0)通过rgb2gray计算得到的值',gray[0,0])

 

np.dot()可以计算向量的点积和矩阵乘法

np.dot(a,b),其中a为一维向量,b为一维向量

import numpy as np
 
a = np.array([1, 2, 3, 4, 5])
b = np.array([6, 7, 8, 9, 10])
print(np.dot(a, b))

np.dot(a,b)其中a为二维矩阵,b为一维向量。这时b会当作一维矩阵继续计算

import numpy as np
 
a = np.random.randint(0,10, size = (5,5))
b = np.array([1,2,3,4,5])
print("the shape of a is " + str(a.shape))
print("the shape of b is " + str(b.shape))
print(np.dot(a, b))

一维矩阵和一维向量的区别,一维向量的shape是(5, ), 而一维矩阵的shape是(5, 1), 若两个参数a和b都是一维向量则是计算的点积,但是当其中有一个是矩阵时(包括一维矩阵),dot便进行矩阵乘法运算。所以如果是一个向量和一个矩阵相乘,这个向量会自动转换为一维矩阵进行计算。


np.dot(a ,b), 其中a和b都是二维矩阵,此时dot就是进行的矩阵乘法运算

import numpy as np
 
a = np.random.randint(0, 10, size = (5, 5))
b = np.random.randint(0, 10, size = (5, 3))
print("the shape of a is " + str(a.shape))
print("the shape of b is " + str(b.shape))
print(np.dot(a, b))

参考文献

opencv色彩空间类型转换(python)_暴风雨中的白杨的博客-CSDN博客_opencv转换类型 python

你可能感兴趣的:(opencv,python,opencv)