読者です 読者をやめる 読者になる 読者になる

16ビット画像を生成する

訳あって1画素16ビットのグレースケール画像が入り用になりました。生成できるフリーソフトは何かしらあるとは思いますが、今回はこれをOpenCVで生成しようと考えました。


OpenCVで画像ファイルを作るというとcvSaveImageですが、この関数のリファレンスを見ると、

Only 8-bit single-channel or 3-channel (with ‘BGR’ channel order) images can be saved using this function.

http://opencv.willowgarage.com/documentation/highgui.html?highlight=cvsaveimage#cvSaveImage

と、8ビットの画像しか対応してないようなことが書かれており、これを鵜呑みにしてOpenCVでは作れないのだと思っていました。


しかし試してみると案外できてしまいました。

IplImage* img = cvCreateImage(cvSize(500, 500), IPL_DEPTH_16U, 1);

for (int x = 0; x < img->width; x++)
{
    for (int y = 0; y < img->height; y++)
    {
        cvSetReal2D(img, y, x, 65535 * (sqrt(pow(250-x, 2) + pow(250-y, 2)) / 500));
    }
}

cvSaveImage("16bit.png", img);

1.1pre・2.0共に動作することが確認できました。PNG以外の形式ではどうなのかは試していないのでよく分かりません。