忍者ブログ
MASTER →  ADMIN / NEW ENTRY / COMMENT
現代魔法(nearly equal 情報技術)を勉強中な人のメモ(チラシの裏)
/ 2024/11/22 (Fri) / 編集
×

[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。

/ 2009/06/08 (Mon) / 編集

OpenCV(lplImage)とARToolKit(ARUint8)の相互変換

[見習い日記]ARToolkitとOpenCVの相互画像変換より4ちゃんねるのIplImageをARToolKit用の画像に変換する方法(以下引用です。トラックバック等は必ず「http://d.hatena.ne.jp/narai/20081207/1228637893」へ)
ARUint8 *dataPtr;
IplImage *image_opencv, *gray_opencv;

//ARToolkit→OpenCV
image_opencv = cvCreateImage(cvSize(arImXsize, arImYsize), IPL_DEPTH_8U, 4);
memcpy(image_opencv->imageData, dataPtr, image_opencv->imageSize);

//何らかの処理
gray_opencv = cvCreateImage(cvSize(arImXsize, arImYsize), IPL_DEPTH_8U, 1);
cvCvtColor(image_opencv, gray_opencv, CV_BGRA2GRAY);
cvAdaptiveThreshold(gray_opencv, gray_opencv, 255, CV_ADAPTIVE_THRESH_MEAN_C, CV_THRESH_BINARY, 11, 10);
cvCvtColor(gray_opencv, image_opencv, CV_GRAY2BGRA);

//OpenCV→ARToolkit
dataPtr = (ARUint8*)(image_opencv->imageData);


[programming memo]ARToolKit:IplImageとの相互変換より3ちゃんねるのIplImageをARToolKit用の画像に変換する方法(以下引用です。トラックバック等は必ず「http://progmemo.blogspot.com/2009/04/artoolkitiplimage.html」へ)

//flagが-1なら逆変換
void ARtoIpl(IplImage* ipl, ARUint8* arimg,int flag){

int width = ipl->width; //ARのImageも同じ幅とする
int height = ipl->height; //ARのImageも同じ高さとする
int ARWidthStep = width * 4;

for(int j = 0; j < height; j++){
 for(int i = 0; i < width; i++){
  t0 = ipl->widthStep * j + i * ipl->nChannels;
  t1 = ARWidthStep * j + i * 4;
  
  for(int c = 0; c <>nChannels; c++){
   if(flag == -1) arimg[t1 + c] = ipl->imageData[t0 + c];
   else ipl->imageData[t0 + c] = arimg[t1 + c];
  }
 }
}



IPL_DEPTH_8Uでdepthを8(256諧調)にするのと、4チャンネルの画像にすることが大事なのかな?でも4チャンネル目は0らしい

拍手[0回]

PR
忍者ブログ [PR]