3

入力画像のガンマを変更する関数を書こうとしています。

私が書いたコードは次のとおりです。

if(inputImage.channels() >= 3)
{
   Mat hsv;

    cvtColor(inputImage,hsv,CV_BGR2HSV_FULL);

    vector<Mat> channels;
    split(hsv,channels);

    Mat tmp1=(channels[2]/255);
    Mat tmp;
    pow(tmp1,1.5,tmp);
    channels[2]=255 *tmp;
    Mat result;
    merge(channels,hsv);

    cvtColor(hsv,result,CV_HSV2BGR_FULL);

    return result;
}

しかし、行 pwo(...): で run timeerror が発生しています: エラーは次のとおりです。

OpenCV Error: Assertion failed (depth == CV_32F || depth == CV_64F) in unknown function, file C:\slave\builds\WinInstallerMegaPack\src\opencv\modules\core\src\mathfuncs.cpp, line 1931

pow で 1.5 を 2 に変更すると、エラーは発生しません。openCVの行列の各要素を非整数値にするにはどうすればよいですか?

OpenCVで画像のガンマを変更するより良い方法はありますか?

4

1 に答える 1

7

エラーが示すように、入力画像tmp1は CV_32F または CV_64F 形式である必要があります。たとえば、次のように記述できます。

Mat newTmp1;
tmp1.convertTo(newTmp1, CV_32F);
pow(newTmp1,1.5,tmp);

pow関数が 32 ビット float マトリックスで動作できるようにしますnewTmp1

于 2013-07-19T12:38:21.213 に答える