2013-02-28 21 views
8

I homograf üzerinde çalışırken ve H.at<float>(i, j) kullanarak H matrisinin (tip CV_64F) değerlerini kontrol etmek için deneyin her rastgele sayılar (bazen çöp değeri) olsun. Float matrisinin piksel değerlerine erişmek istiyorum. Bunu yapmanın bir yolu var mı?CV_32F/CV_64F Mat piksel değerlerine nasıl erişilir?

Mat A = Mat::eye(3, 3, CV_64F); 
float B; 
for(int i=0; i<A.rows; i++) 
{ 
    for(int j=0; j<A.cols; j++) 
    { 
     printf("%f\n", A.at<float>(i, j)); 
    } 
} 

imshow("identity", A); 
waitKey(0); 

Bu bir kimlik matrisi doğru görüntü gösterilir ama piksel değerlerini erişmeye çalışırken, ben

0,000000 1,875000 0,000000 0,000000 0,000000 0,000000 0,000000 0,000000 0,000000

olsun

Neden böyle?

cevap

16

Bunu denemek gerekir:

A.at<double>(i, j); 

matriksiniz sırayla bu tip double değil float unsurlarını içeren anlamına gelen "tip" CV_64F olarak belirtilir. Bu arada

, bunu haberdar olup olmadığını emin değilim ama şöyle matrisi yazdırmak için cout kullanabilirsiniz:
std::cout << A << std::endl; 

Ben bu küçük bir matris teftiş için yararlı olduğu bulunmuştur veya bir matris dilimi.

+0

oh. güzel. işe yaradı. Teşekkürler. :) – Froyo

+0

Belki cevabımı doğru olarak işaretleyebilirsiniz. Teşekkürler. – lightalchemist

3

Aşağıdaki örnek, Hilbert matrisi başlatır:

Mat H(100, 100, CV_64F); 
for(int i = 0; i < H.rows; i++) 
    for(int j = 0; j < H.cols; j++) 
     H.at<double>(i,j)=1./(i+j+1); 

operatörü de kullanılan boyut tanımlayıcı rastgele seçilmiş edilemez göz önünde bulundurun. Verileri almaya çalıştığınız görüntüye bağlıdır. Aşağıdaki tablo, bu konuda daha iyi bir fikir verir:

Matris CV_8U türündeyse Mat.at<uchar>(y,x) kullanın.

Matris CV_8S türündeyse, Mat.at<schar>(y,x) kullanın.

Matris, CV_16U türündeyse, Mat.at<ushort>(y,x) kullanın.

Matris, CV_16S türündeyse Mat.at<short>(y,x) kullanın.

Matris, CV_32S türündeyse Mat.at<int>(y,x) kullanın.

Matris, CV_32F türündeyse Mat.at<float>(y,x) kullanın.

Matris, CV_64F türündeyse, Mat.at<double>(y,x) kullanın.

(OpenCV docs adresinden alındı)

+0

güzel özetleme, thx! –