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