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