[OpenCV3函數] —— cvtColor

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);
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章