OpenCVで画像の生成

本物のページはこちら→cvcreateimage

Included page "cvcreateimage" does not exist (create it now)

画像のファイル保存

cvCreateImage

cvCreateImage( cvSize( range_reso, azimuth_reso), IPL_DEPTH_8U,1);

ヘッダの作成とデータ領域の確保

IplImage* cvCreateImage( CvSize size, int depth, int channels );

size

画像の幅と高さ.

depth

画像要素のビットデプス.以下の内のいずれか.
IPL_DEPTH_8U 符号無し 8 ビット整数
IPL_DEPTH_8S 符号有り 8 ビット整数
IPL_DEPTH_16U 符号無し 16 ビット整数
IPL_DEPTH_16S 符号有り 16 ビット整数
IPL_DEPTH_32S 符号有り 32 ビット整数
IPL_DEPTH_32F 単精度浮動小数点数
IPL_DEPTH_64F 倍精度浮動小数点数

cv::imwrite()を使う方法

これがナウいやつ。
CV_16Uは1画素16ビットで1チャンネルって意味

void CSolutionFile::ImageOut(){
 
    int azimuth_reso=htons(mHeader.m_XbandRunInfo.dirnum);//(方位分解能分)
    int range_reso=htonl(mHeader.m_XbandRunInfo.rangeNum);//レンジ数分
 
    IplImage* img = cvCreateImage( cvSize( range_reso, azimuth_reso), IPL_DEPTH_8U,1);
    cvZero (img);
    cv::Mat mtx(cv::Size(range_reso,azimuth_reso), CV_16U,cv::Scalar(0,0,0));//黒で初期化
    printf("imageSize=%d\n",img->imageSize);
    int widthStep=img->widthStep;
        for(int y=0;y<azimuth_reso;y++){
            for(int x=0;x<range_reso;x++){
                 //計算結果を0~255の範囲内にする
                unsigned short val=mSectors[y].m_Data[x];
                val = (0 > val) ? 0 : val;
                val = (val < 255) ? val : 255;
 
                mtx.at<unsigned short>(y,x)=(htons(mSectors[y].m_Data[x]));
 
        }
 
 /* 画像の書き出し */
    cv::imwrite("16test.png", mtx);
        cvReleaseImage( &img);
 
    }
    }

IplImageを使う方法(うまくいっていない)

C++じゃなくてCらしいからかな。
CreateImage

注意

ファイル名に改行を入れてしまって、出力されない、おかしいな、という罠に陥った。

IplImage* input = cvCreateImage( cvSize( 320, 240), IPL_DEPTH_8U, 1);
cvReleaseImage( &input);
//cvReleaseImageはIplImage**型が引数IplImage*型ではない

サポートサイト Wikidot.com