我使用的opencv是2.4.11版本,里面是有sift特征提取函式,我是通過多載的()運算子來提取的特征,特征點向量vector<Keypoints>使用的人臉面部特征點,一共68個點,我設定keypoints為面部特征點的坐標,但是提取出來的sift特征的描述子全是0,
下面是我使用的代碼:
Mat image = imread("123.jpg",0); //一副人臉影像
fstream fin;
fin.open("123.pts"); //存放68個特征點的檔案
KeyPoint kp;
vector<KeyPoint> vkp;
for (int i = 0; i < 68; i++) //人臉的68個特征點坐標值
{
fin >> kp.pt.x;
fin >> kp.pt.y;
kp.octave = 3;
kp.angle = 0;
kp.size = 0;
kp.class_id = -1;
kp.response = 0;
vkp.push_back(kp);
}
Mat desc;
SIFT sift;
sift(image, Mat(), vkp, desc,);
在上面的kp.angle,size,response設定為某些值的時候,是可以得到非零的特征描述子的,但是我不知道這些值應當怎么設定,
請問,這些值如果需要自己設定的話,那么該怎么設定,還是有自動的方法?
PS:我使用同樣的方法是可以提取ORB特征的
uj5u.com熱心網友回復:
你引數設定的問題,orb算子可以是因為orb提取的是fast特征和brief描述子,跟sift無關。另外,建議你用opencv3.0,直接detect 和compute的,比這個多載函式用著方便多了,不會手動設定那么多引數轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/145184.html
標籤:圖形處理/算法
上一篇:opencv相機標定
