2016-05-04 7 views
1
int cn = img_V.channels(); 
Scalar_<unit8_t> bgrPixel; 

for (int i = 0; i < img_V.rows; i++) 
{ 
    uint8_t* rowPtr = img_V.row(i); 
    for (int j = 0; j < img_V.cols; j++) 
    { 
     bgrPixel.val[0] = rowPtr[j*cn + 0]; // B 
     bgrPixel.val[1] = rowPtr[j*cn + 1]; // G 
     bgrPixel.val[2] = rowPtr[j*cn + 2]; // R 

     // do something with BGR values... 
    } 
} 

で使用することが可能です。誰でも助けてくれますか?あなたがする必要がありエラー:識別子<uint8_t>未定義とそれは私がVisual StudioとOpenCVのを使用していますが、それは<code>uint8_t</code>示すエラーを識別することはできませんOpenCVの

+0

[不明な型名 'uint8 \ _t'、MinGW](http://stackoverflow.com/questions/8953274/unknown-type-name-uint8-t-mingw) – zeromus

答えて

2

#include <cstdint> 

uint8_tを参照してください。

ただし、OpenCVではucharを使用する必要があります。


また、正しくループしていないことに注意してください。 正しいアプローチは次のようになります。

for (int i = 0; i < img_V.rows; i++) 
{ 
    Vec3b* rowPtr = img_V.ptr<Vec3b>(i); 
    for (int j = 0; j < img_V.cols; j++) 
    { 
     Vec3b& bgrPixel = rowPtr[j]; 

     // do something with BGR values... 
    } 
} 
+0

のご意見ありがとうございますとしょうかん。 :Dしかし、私はあなたのループシステムを使用する場合、私はどのようにピクセル値を表示できますか? :) –

+0

'bgrPixel'は各ピクセルの値を含みます。値を表示するには、 'cout << bgrPixel;'または各チャンネルにアクセスするだけです: 'cout <<" B: "<< int(bgrPixel [0])<<" G: "<< int(bgrPixel [1])<< "R:" << int(bgrPixel [2]); ' – Miki

+0

ありがとうございました。これは私が欲しかったものです:) –

0

あなたはおそらく画像を扱っているので、私はimg_Vcv::Matであることを想像してみてください。最新のdocumentationによると、cv::Mat::row(int y)は別のcv::Matを返します。しかし、デフォルト変換はuint8_tまたはucharにはありません。あなたは、画像の特定の行へのポインタを取得したい場合は、そのテンプレートのバージョンを使用している場合

しかし、あなたはuchar *を返しcv::Mat::ptr(int i0)、または任意の他のタイプのポインタを使用する必要があります。

しかし、uint8_tポインタが必要な場合は、Mikiが言うように最初に行う必要があります。#include <csdtint>

関連する問題