2013-05-07 15 views
1

所以我必須對圖像的一部分進行一些操作。操作是不相關的(我根本不改變這個代碼),但是我創建指針的方式改變了我得到的結果。我不明白爲什麼會發生。OpenCV圖像指針未按預期工作

爲什麼這段代碼獲得的結果我想:

for(int row = 0; row < 70; ++row) { 
    for(int col = 48; col < 208; ++col) { 
     uchar* p = c.ptr(row+col); 
     *p = (1-circuloBinario.at<unsigned char>(row,col-48))*(*p) + circuloBinario.at<unsigned char>(row,col-48)*limite; 
    } 
} 

而這一次犯規?

for(int row = 0; row < 70; ++row) { 
    uchar* p = c.ptr(row+48); 
    for(int col = 48; col < 208; ++col) { 
     *p = (1-circuloBinario.at<unsigned char>(row,col-48))*(*p) + circuloBinario.at<unsigned char>(row,col-48)*limite; 
     p++; 
    } 
} 

順便說一句,我沒有得到任何錯誤與第二碼,​​問題是,結果我得到的是我希望不是什麼(它開始從行比0大修改圖像,並從列開始0而不是48)。

謝謝。

回答

0

Mat::ptr返回指向指定矩陣的指針row

在這裏看到的文檔:http://docs.opencv.org/modules/core/doc/basic_structures.html#mat-ptr

所以既不c.ptr(row+col)也不c.ptr(row+48)意義,因爲你只應傳遞一個行索引到ptr功能。

+0

我明白了。是的,第一個人爲什麼工作,而第二個人沒有工作,這很讓人困惑,但是如果他們兩個都不工作,這會更有意義。我會改變我的代碼,謝謝。 – user2356736 2013-05-07 13:46:57

0

您使用Mat :: pt的方式顯然不正確,正如M456所述。

如果要修改矩陣的某些元素的值,爲什麼不使用以下語法?

c.at<element_type>(row, col) = new_value; 
+0

我想我會像現在這樣使用它,我只是在嘗試另一種方式,那些奇怪的結果讓我感到困惑。謝謝 :) – user2356736 2013-05-07 13:48:07