C++ 在opencv中使用pow将每个数组元素提升为发电错误

C++ 在opencv中使用pow将每个数组元素提升为发电错误,c++,opencv,image-processing,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);

我试图写一个函数,改变输入图像的伽马值

我写的代码如下:

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;
}
如果我将pow中的1.5更改为2,则没有错误。 如何将openCV中矩阵的每个元素提升为非整数值


是否有更好的方法更改OpenCV中图像的伽马值?

正如错误所暗示的,输入图像
tmp1
应为CV\u 32F或CV\u 64F格式。例如,您可以编写:

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

因此,
pow
函数可以对32位浮点矩阵
newTmp1
进行操作,谢谢。如何返回原始格式以便与其他频道合并?
Mat newTmp1;
tmp1.convertTo(newTmp1, CV_32F);
pow(newTmp1,1.5,tmp);