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);