2012-06-22 74 views
3

我是opencv的入門者,Learning Opencv的代碼是用C編寫的。 我需要轉換爲C++。如何將此c代碼轉換爲opencv中的C++

IplImage *imgY = cvCreateImage(imageSize, IPL_DEPTH_8U, 1); 
IplImage *imgCr = cvCreateImage(imageSize, IPL_DEPTH_8U, 1); 
IplImage *imgCb = cvCreateImage(imageSize, IPL_DEPTH_8U, 1); 
IplImage *imgYCrCb = cvCreateImage(imageSize, img->depth, img->nChannels); 

cvCvtColor(img,imgYCrCb,CV_BGR2YCrCb); 
cvSplit(imgYCrCb, imgY, imgCr, imgCb, 0); 

unsigned char *pY, *pCr, *pCb, *pMask; 
pY = (unsigned char *)imgY->imageData; 
pCr = (unsigned char *)imgCr->imageData; 
pCb = (unsigned char *)imgCb->imageData; 
pMask = (unsigned char *)mask->imageData; 
+1

幾乎所有的C代碼都是有效的C++。你需要比這更具體。 –

回答

7

參見:

例如,

IplImage *imgY = cvCreateImage(imageSize, IPL_DEPTH_8U, 1); 

變得

cv::Mat imgY = cv::Mat(imageSize, CV_8UC1); 

cvCvtColor(img,imgYCrCb,CV_BGR2YCrCb); 

成爲

cv::cvtColor(img, imgYCrCb, CV_BGR2YCrCb); 

等等...

編輯:

回答您的評論: OpenCV的2不再需要手動管理內存。

所以,代碼可以被重寫爲:

cv::Mat imgYCrCb; 
std::vector<cv::mat> yCrCb_channels; 

cv::cvtColor(img,imgYCrCb,CV_BGR2YCrCb); 
cv::split(imgYCrCb, yCrCb_channels); 
unsigned char * pY = (uchar *) yCrCn_channels[1].data; 

建議:讀http://www.amazon.com/dp/1849513244/?tag=stackoverfl08-20,它涵蓋了C++的OpenCV接口。

+0

我的第一個問題是分裂功能。在C++中只接受一個向量。第二個問題是我不知道如何使pY =(unsigned char *)imgY-> imageData;在C++中。謝謝。 – RIK

+0

嗨帕斯卡,這些也是平等的嗎? '// frame = cvCreateImage(cvSize(depth_width,depth_height),8,3); //創建幀 \t cv :: Mat frame = cv :: Mat(cvSize(depth_width,depth_height),CV_8UC3);' –

+0

嗨Mona,更好地使用cv :: Mat frame = cv :: Mat(cv ::大小(寬度,高度),CV_8UC3)'。總之,用cv :: Size替換cvSize。此外,名稱depth_width使我想知道您可能會將圖像深度與圖像大小混淆。 –