在opencv中使用pow来将每个数组元素提升到电源生成错误

man*_*ans 3 c++ opencv image-processing

我正在尝试编写一个改变输入图像的伽玛的函数.

我写的代码如下:

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;
}
Run Code Online (Sandbox Code Playgroud)

但我在线路pwo(...)上运行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
Run Code Online (Sandbox Code Playgroud)

如果我在pow中将1.5更改为2,则没有错误.如何将openCV中矩阵的每个元素提升为非整数值?

有没有更好的方法来改变OpenCV中图像的伽玛?

fat*_*ihk 6

如错误所示,输入图像tmp1应为CV_32F或CV_64F格式.例如,您可以写:

Mat newTmp1;
tmp1.convertTo(newTmp1, CV_32F);
pow(newTmp1,1.5,tmp);
Run Code Online (Sandbox Code Playgroud)

这样pow功能就可以在32位浮点矩阵上运行newTmp1.