2012-06-22 75 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使我想知道您可能会将图像深度与图像大小混淆。 –