颜色不变量与Python OpenCV的使用



我正试图找到照片的颜色不变量。我搜索了它,发现我需要找到c1的值作为它最简单的特征。我们可以用这个公式CCD_ 3求出CCD_。

当我试图用img.shape找到img列和行并分割这个图像b,g,r时。

import cv2
import math
import matplotlib.pyplot as plt
img = cv2.imread('CU.png')
b,g,r = cv2.split(img)
cv2.imshow('Image',img)
cv2.waitKey(0)
cv2.destroyAllWindows()
print(img.shape)
rows,cols,channels = img.shape
for i in range(rows):
for j in range(cols):
b = img[i,j,0]
g = img[i,j,1]
r = img[i,j,2]
x = (r/max(g,b))
c1= math.atan(x)
plt.plot(i,j,c1)
plt.show()

我想我应该把图片分成行和列,然后把它分解成b、g、r。我必须使用每行和列中的值b、g和r来找到c1,但我稍后会这样做c1

不知道有没有人知道这件事?如何找到颜色常数,我应该怎么做,或者我找到这个c1的方法正确吗?

由于Th.Gevers,J.van de Weijer,H.Stokman,颜色特征检测文章,颜色不变量是用这些公式检测的。并且可以像在附加图像中一样检测C1、c2、c3值。但如果我们实现像您的公式一样的解决方案,我们可以使用:

import PIL
import math
def invariant_r(img):
c1 = np.zeros(32,32)
for i in range(0, 32):
for j in range(0, 32):
r, g, b = img.getpixel((i, j))
x = (r/max(g,b))
c1[i][j]= math.atan(x)
return c1
def invariant_g(img):
c1 = np.zeros(32,32)
for i in range(0, 32):
for j in range(0, 32):
r, g, b = img.getpixel((i, j))
x = (g/max(r,b))
c1[i][j]= math.atan(x)
return c1
def invariant_b(img):
c1 = np.zeros(32,32)
for i in range(0, 32):
for j in range(0, 32):
r, g, b = img.getpixel((i, j))
b = (b/max(r,g))
c1[i][j]= math.atan(x)
return c1

最新更新