我是新來的OpenCV,並試圖用C++下面的MATLAB代碼轉換爲OpenCV的:到目前爲止轉換MATLAB代碼以OpenCV的C++
[FX,FY]=gradient(mycell{index});
我曾嘗試以下,但我的價值觀是完全不同於我MATLAB導致
Mat abs_FXR;
Mat abs_FYR;
int scale = 1;
int delta = 0;
// Gradient X
Sobel(myImg, FXR, CV_64F, 1, 0, 3, scale, delta, BORDER_DEFAULT);
convertScaleAbs(FXR, abs_FXR);
imshow(window_name2, abs_FXR);
// Gradient Y
Sobel(myImg, FYR, CV_64F, 0, 1, 3, scale, delta, BORDER_DEFAULT);
convertScaleAbs(FYR, abs_FYR);
imshow(window_name3, abs_FYR);
我也使用filter2D按這個問題試過了,但它仍然給了不同的結果:Matlab gradient equivalent in opencv
Mat kernelx = (Mat_<float>(1,3)<<-0.5, 0, 0.5);
Mat kernely = (Mat_<float>(3,1)<<-0.5, 0, 0.5);
filter2D(myImg, FXR, -1, kernelx);
filter2D(myImg, FYR, -1, kernely);
imshow(window_name2, FXR);
imshow(window_name3, FYR);
我不知道這是否偏離軌道或如果它只是一個我需要改變的參數。任何幫助,將不勝感激。
UPDATE 下面是從MATLAB我的預期輸出:
但這裏是我從OpenCV的使用越來越索貝爾:
而且這裏是我使用Filter2D方法從OpenCV輸出(我試過incr
eye_rtp.convertTo(eye_rt,CV_64F);
你能提供結果嗎?(我的意思是你的梯度圖像) – Hadi