cvSet2D(matrix, i, j, tuple)
爲什麼cvSet2D接受一個雙元組元組,爲什麼這個元組全部爲0,除了第一個元素?
嗨。我正在解剖http://www.eml.ele.cst.nihon-u.ac.jp/~momma/wiki/wiki.cgi/OpenCV/Gabor%20Filter.html中給出的Gabor濾波器代碼。我有cvSet2D尤其是在下面的代碼片段中使用(如鏈接給出)幾個問題:
C代碼:
for (x = -kernel_size/2;x<=kernel_size/2; x++) {
for (y = -kernel_size/2;y<=kernel_size/2; y++) {
kernel_val = exp(-((x*x)+(y*y))/(2*var))*cos(w*x*cos(phase)+w*y*sin(phase)+psi);
cvSet2D(kernel,y+kernel_size/2,x+kernel_size/2,cvScalar(kernel_val));
cvSet2D(kernelimg,y+kernel_size/2,x+kernel_size/2,cvScalar(kernel_val/2+0.5));
}
}
Python代碼:
for x in range(-kernel_size/2+1,kernel_size/2+1):
for y in range(-kernel_size/2+1,kernel_size/2+1):
kernel_val = math.exp(-((x*x)+(y*y))/(2*var))*math.cos(w*x*math.cos(phase)+w*y*math.sin(phase)+psi)
cvSet2D(kernel,y+kernel_size/2,x+kernel_size/2,cvScalar(kernel_val))
cvSet2D(kernelimg,y+kernel_size/2,x+kernel_size/2,cvScalar(kernel_val/2+0.5))
正如我」 m知道cvSet2D將矩陣的第(j,i)個像素設置爲最後一個參數中定義的元組的等效顏色值。但是爲什麼它需要一個雙元組?將一個像素顏色定義爲一個整數元組,是不是更自然一些?
最後,如果我正確讀取了文檔,則使用的cvScalar方法將返回4元組<given_value_in_double, 0.000000, 0.000000, 0.000000)>
。我推測cvSet2D取前三個值並將其用作RGB三元組。但是,看到Gabor濾波器的輸出或多或少處於灰度級,這不會成爲這種情況,我的方案中生成的顏色將傾向於紅色。那麼,cvSet2D對這個元組做了什麼?
謝謝任何會花費心思解釋的人!
感謝你們倆。但額外感謝@misha的額外細節。 – skytreader