【发布时间】:2011-11-24 12:58:42
【问题描述】:
cvSet2D(matrix, i, j, tuple)
嗨。我正在剖析 http://www.eml.ele.cst.nihon-u.ac.jp/~momma/wiki/wiki.cgi/OpenCV/Gabor%20Filter.html 中给出的 Gabor 过滤器代码。我对 cvSet2D 有几个问题,尤其是在以下代码 sn-ps 中使用的问题(如链接中给出的):
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))
据我所知,cvSet2D 将矩阵的第 (j, i) 个像素设置为最后一个参数中定义的元组的等效颜色值。但是为什么它需要一个双精度元组呢?看到一个像素颜色被定义为一个整数元组,接收一个整数元组不是更自然吗?
最后,如果我正确阅读了文档,使用的 cvScalar 方法会返回 4 元组 <given_value_in_double, 0.000000, 0.000000, 0.000000)>。我推测 cvSet2D 采用前三个值并将其用作 RGB 3 元组。但是,看到 Gabor 过滤器的输出或多或少是灰度的,这并不成立,我的方案中产生的颜色将倾向于红色。那么,cvSet2D 对这个元组做了什么?
感谢任何愿意花时间解释的人!
【问题讨论】:
标签: python c image-processing opencv