cvSet2D(matrix, i, j, tuple)
Привет. Я анализирую код фильтра Габора, указанный в http://www.eml.ele.cst.nihon -u.ac.jp / ~ momma / wiki / wiki.cgi / OpenCV / Gabor% 20Filter.html . У меня есть несколько вопросов по 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))
Как мне известно, cvSet2D устанавливает (j, i) -й пиксель матрицы в эквивалентное значение цвета кортежа, определенного в последнем параметре. Но почему это принимает в кортеже двойных? Разве не естественнее принимать кортеж целых чисел, видя, что цвет пикселя определяется как кортеж целых чисел?
Наконец, если я правильно прочитал документы, используемый метод cvScalar возвращает 4-кортеж <given_value_in_double, 0.000000, 0.000000, 0.000000)>
. Я предположил, что cvSet2D принимает первые три значения и использует его как RGB 3-кортеж. Но, учитывая, что выходные данные Фильтров Габора более или менее в оттенках серого, что не будет так, цвета, полученные в моей схеме, будут склоняться к красному. Итак, что cvSet2D делает с этим кортежем?
Спасибо за всех, кто возьмется объяснять!