opencv 3.0 灰度图 转 彩图 applyColorMap
matlab有个imagesc,在opencv中 没有对应的函数
代码
#include<opencv2/opencv.hpp> using namespace cv; void main() { const char* imagename = "2.jpg"; //产生灰度图 Mat img = imread(imagename); Mat gray, color; cvtColor(img, gray, CV_RGB2GRAY); //灰度彩色映射变换 double vmin, vmax, alpha; minMaxLoc(gray, &vmin, &vmax); alpha = 255.0 / (vmax - vmin); gray.convertTo(gray, CV_8U, alpha, -vmin * alpha);//图像增强 applyColorMap(gray, color, COLORMAP_JET); imshow("image", img); //显示图像 imshow("gray", gray); imshow("color", color); waitKey(); destroyAllWindows(); }
minMaxLoc()函数
功能:查找全局最小和最大数组元素并返回它们的值和它们的位置。
void minMaxLoc(InputArray src, CV_OUT double* minVal, CV_OUT double* maxVal=0, CV_OUT Point* minLoc=0, CV_OUT Point* maxLoc=0, InputArray mask=noArray());
参数解释
参数1:InputArray类型的src,输入单通道数组(图像)。
参数2:double*类型的minVal,返回最小值的指针。若无须返回,此值置为NULL。
参数3:double*类型的maxVal,返回最大值的指针。若无须返回,此值置为NULL。
参数4:Point*类型的minLoc,返回最小位置的指针(二维情况下)。若无须返回,此值置为NULL。
参数5:Point*类型的maxLoc,返回最大位置的指针(二维情况下)。若无须返回,此值置为NULL。
参数6:InputArray类型的mask,用于选择子阵列的可选掩膜。
convertTo的用法
src.convertTo(dst, type, scale, shift)
img参数为图像数据来源,其类型为Mat。
注意也不是所有格式的Mat型数据都能被使用保存为图片,目前OpenCV主要只支持单通道和3通道的图像,并且此时要求其深度为8bit和16bit无符号(即CV_16U),所以其他一些数据类型是不支持的,比如说float型等。
如果Mat类型数据的深度和通道数不满足上面的要求,则需要使用convertTo()函数和cvtColor()函数来进行转换。
convertTo()函数负责转换数据类型不同的Mat,即可以将类似float型的Mat转换到imwrite()函数能够接受的类型。
而cvtColor()函数是负责转换不同通道的Mat,因为该函数的第4个参数就可以设置目的Mat数据的通道数(只是我们一般没有用到它,一般情况下这个函数是用来进行色彩空间转换的)。
另外也可以不用imwrite()函数来存图片数据,可以直接用通用的XML IO接口函数将数据存在XML或者YXML中。
缩放并转换到另外一种数据类型:
dst:目的矩阵;
type:需要的输出矩阵类型,或者更明确的,是输出矩阵的深度,如果是负值(常用-1)则输出矩阵和输入矩阵类型相同;
scale:比例因子;
shift:将输入数组元素按比例缩放后添加的值;
dst(i)=src(i)xscale+(shift,shift,...)
如果scale=1,shift=0,则不进行比例缩放。
如果输入数组与输出数组的类型相同,则函数可以被用于缩放和平移矩阵或图像;
applyColorMap()
参考:https://blog.csdn.net/billbliss/article/details/43452173
参考:https://blog.csdn.net/haima1998/article/details/82079042