cvtColor
頭文件:opencv2/imgproc/imgproc.hpp
**作用:**用於在圖像中不同的色彩空間進行轉換,用於後續處
函數原型:
void cvtColor(InputArray src, OutputArray dst, int code, int dstCn=0 );
- 參數1 InputArray src :輸入圖像即要進行顏色空間變換的原圖像,可以是Mat類
- 參數2 OutputArray dst:輸出圖像即進行顏色空間變換後存儲圖像,也可以Mat類
- 參數3 code:轉換的代碼或標識,即在此確定將什麼制式的圖片轉換成什麼制式的圖片
- 參數3 dstCn:目標圖像通道數,如果取值爲0,則由src和code決定
**注意:**使用cvtColor RGB轉成其他格式時,需要注意RGB圖像的三個通道的順序,是RGB還是BGR.大部分情況下opencv爲RGB,但實際上是BGR,這一點需要注意。
需要注意各個值的範圍:
CV_8U圖像 其通道值範圍爲0到255
CV_16U時其值通道值範圍爲0到65535
CV_32F時,其通道值範圍爲0到1
在線性轉換時,其範圍沒有較大關係,但是如果是非線性轉換,RGB圖像需要做正確的歸一化,以擴展到響應的範圍。例如TGB->LUV轉換,如果32位的浮點圖像之間是由8位的圖像轉換而來,那麼將0到255的範圍轉換成0,1,那麼轉換之前首先需要需要所需其圖像
img *= 1.0/255;
cvtColor(img, img, COLOR_BGR2Luv);
示例:
#include<iostream>
#include<opencv2/highgui/highgui.hpp>
#include <opencv2/imgproc/imgproc.hpp>
using namespace std;
int main() {
cv::VideoCapture frames;
frames.open("C:/Users/Administrator/Desktop/test.avi");
assert(frames.isOpened());
cv::Mat frame,grey_frame;
for (;;) {
frames >> frame;
if (frame.empty())break;
cv::cvtColor(frame, grey_frame, cv::COLOR_BGR2GRAY, 0); //轉灰度
cv::imshow("窗口",grey_frame);
if (cv::waitKey(33)>=0)break;
}
cv::waitKey(0);
}