如果我使用scipy.ndimage.filters.convole
在Python應用索貝爾過濾器的圖像,我得到有意義的結果應用內核與OpenCV的,例如,對於這個簡單的輸入圖像img
在C++
0 255 0
0 255 0
0 255 0
卷積
dimage.filters.convolve(img, Kx)
與Kx
-1 0 1
-2 0 2
-1 0 1
返回MEA在X方向ningful梯度:
-1020 0 1020
-1020 0 1020
-1020 0 1020
我不知道如何使用C中openCV2 ++雖然獲得相同的結果。當我通過
int image_data[9] = {0, 255, 0, 0, 255, 0, 0, 255, 0};
cv::Mat image = cv::Mat(3, 3, CV_32F, image_data);
定義輸入圖像,並通過
cv::Mat gradientx;
double sobelx_data[9] = {-1, 0, 1, -2, 0, 2, -1, 0, 1};
cv::Mat sobelx = cv::Mat(3, 3, CV_32F, sobelx_data);
cv::filter2D(image, gradientx, -1, sobelx);
我從
for(int row=0; row<gradientx.rows; row++) {
for(int col=0; col<gradientx.cols; col++) {
std::cout << gradientx.at<int>(row,col) << std::endl;
}
}
以下結果應用內核返回下面的圖片
478 -2147482660 478
478 -2147482660 478
478 -2147482660 478
似乎有一個n溢出問題,但我不知道爲什麼。試圖從gradientx.at<double>(row,col)
產生值
-1.68911e-311 8.10602e-312 8.11663e-312
-1.68911e-311 8.10602e-312 8.11663e-312
-1.68911e-311 2.122e-314 8.54412e-72
有人可以告訴我爲什麼這是嗎? filter2D
是不是應該對圖像進行二維卷積,爲什麼當用<double>
尋址輸出像素時會出現奇怪的值?謝謝。
'CV_32F'是一個'float'。 – beaker
@beaker謝謝,我把它改成浮動..現在把它打印出零矩陣... – TheWaveLad
現在看起來你遇到了邊界類型的問題。我會在一秒內發佈答案。 – beaker