カメラからの画像データ取得 – プログラミング – Home

カメラからの画像データ取得
 
通知
すべてクリア

[解決済] カメラからの画像データ取得


あどみん
 あどみん
(@あどみん)
ゲスト
結合: 16年前
投稿: 4
Topic starter  

現在USBカメラのカメラデータを取得するソフトを作成しています。
取得したデータは後に画像処理した上で出力します。

カメラからうまく画像データが取得できません。
取得したデータを出力してみると以下のアドレスのような画像になってしまいます。

取得したカメラから取得したデータは中でどのような並びになっているのでしょうか?
ちなみに画像サイズは横320x縦240です。

以下が主要な所を抜粋したコードです。
ご指導お願いします。

開発環境VC++2005

int CameraNumber = 1;

// 初期化
GetDlgItem(IDC_PIC1,&hPic[CameraNumber]);
m_pCamera[CameraNumber ] = new CCamera(CameraNumber);
m_pCamera[CameraNumber ]->InitGraphs(&hPic[CameraNumber]);
// 取得画像データ情報
int iSize = m_pCamera[CameraNumber]->GetBufferSize();
int iWidth = m_pCamera[CameraNumber]->GetImageWidth();
int iHeight = m_pCamera[CameraNumber]->GetImageHeight();
// 画像データ取得
unsigned char* m_pSnapImage = new unsigned char[iSize];
m_pCamera[CameraNumber]->GetCurrentImage(m_pSnapImage);
// 取得した画像データを出力
int Num = 0;
int Ynum = 0;
int Xnum = 0;
for(int Num = 1; Num <= iSize; Num++){
// X位置カウント
Xnum++;
// X端っこで折り返し
if( Xnum == 321 ){
// Y位置を上げる
Ynum++;
// X位置初期化
Xnum = 1;
}
// 色情報を取得(Y軸で反転している?)
m_dcBuffer.SetPixel(Xnum,240-Ynum,RGB(m_pSnapImage[Num+2],
m_pSnapImage[Num+1],
m_pSnapImage[Num+0]));
   // アドレスを進める
Num +=3;
}
// 出力
pdc->BitBlt( 1,1,320,240, &m_dcBuffer, 1, 1, SRCCOPY);


引用未解決
トピックタグ
...
 ...
(@...)
ゲスト
結合: 22年前
投稿: 113
 

勘!

 :
 :
 :

 // 取得した画像データを出力
 int Ynum,Xnum;
 for(Ynum = 0; Ynum < 240; Ynum++) {
  for(Xnum = 0; Xnum < 320; Xnum++) {
   int Num;
   Num = (Ynum * 320 + Xnum) * 4;
   m_dcBuffer.SetPixel(
     Xnum, Ynum,
     RGB(m_pSnapImage[Num + 2],
       m_pSnapImage[Num + 1],
       m_pSnapImage[Num + 0])
   );
  }
 }

 :
 :
 :


返信引用
あどみん
 あどみん
(@あどみん)
ゲスト
結合: 16年前
投稿: 4
Topic starter  

...さんのコードで試しましたがダメでした。
同じような結果でした。

以下のコードがおかしかったようです。

// アドレスを進める
Num +=3; -> Num +=2;

なんでこうなのかが解らない。。。。
でも出力したら色合いがおかしいです。
なぜでしょうか?


返信引用
rin
 rin
(@rin)
ゲスト
結合: 18年前
投稿: 112
 

どっちで勘違いしてるのかわからないが

1:
入力が32ビットカラーではなく24ビットカラーだった

2:
>for(int Num = 1; Num <= iSize; Num++){
ここで1進めてるから

のどっちかではないかな


返信引用
...
 ...
(@...)
ゲスト
結合: 22年前
投稿: 113
 

元のソースを見ると。。。

for(int Num = 1; Num <= iSize; Num++){
 :
(中略)
 :
   // アドレスを進める
Num +=3;
}

とあるので、
Num+=3;
を行った後にfor文の中のNum++が実行されるからでしょうね。

さて。。
m_pSnapImageの中身はプログラムを見る限り、
B,G,Rの色要素しかないのですか?
本当にこの順番で意図した色要素が入っているか、
確認して下さい。

# RGBの要素しかないのであれば、自分が提示したソースの
# Num = (Ynum * 320 + Xnum) * 3;
# と修正すると良いのかな(但しY軸で反転しているのかは知らないけれど)。


返信引用
...
 ...
(@...)
ゲスト
結合: 22年前
投稿: 113
 

追加質問になりますが。。。

どうして、Numが1から開始されているのでしょうか?
そういう仕様なのですか?


返信引用
あどみん
 あどみん
(@あどみん)
ゲスト
結合: 16年前
投稿: 4
Topic starter  

...さんのご指摘通り

> どうして、Numが1から開始されているのでしょうか?
> for(int Num = 1; ....
が原因でした。

ありがとうございました。


返信引用
あどみん
 あどみん
(@あどみん)
ゲスト
結合: 16年前
投稿: 4
Topic starter  

すみません。
解決です。


返信引用

返信する

投稿者名

投稿者メールアドレス

タイトル *

プレビュー 0リビジョン 保存しました
共有:
タイトルとURLをコピーしました