static IplImage* qImage2IplImage(const QImage& qImage)
{
int width = qImage.width();
int height = qImage.height();
// Creates a iplImage with 3 channels
IplImage *img = cvCreateImage(cvSize(width, height), IPL_DEPTH_8U, 3);
char* imgBuffer = img->imageData;
//Remove alpha channel
int jump = (qImage.hasAlphaChannel())? 4 : 3;
for(int y=0;yheight;y++){
QByteArray a((constchar*)qImage.scanLine(y), qImage.bytesPerLine());
for(int i=0; i<a.size(); i+="jump){
//Swap from RGB to BGR
imgBuffer[2]= a[i];
imgBuffer[1]= a[i+1];
imgBuffer[0]= a[i+2];
imgBuffer+=3;
}
}
return img;
This snippet will convert a iplImage with depth 8 and 3 channels into a 24-bit QImage.
static QImage IplImage2QImage(const IplImage *iplImage)
{
int height = iplImage->height;
int width = iplImage->width;
if (iplImage->depth == IPL_DEPTH_8U && iplImage->nChannels == 3)
{
const uchar *qImageBuffer =(const uchar*)iplImage->imageData;
QImage img(qImageBuffer, width, height, QImage::Format_RGB888);
return img.rgbSwapped();
}else{
qWarning() << "Image cannot be converted.";
return QImage();
}
}
http://wiki.forum.nokia.com/index.php?title=Special:PdfPrint&page=Using_OpenCV_with_Qt
Another method here:
http://umanga.wordpress.com/2010/04/19/how-to-covert-qt-qimage-into-opencv-iplimage-and-wise-versa/
Do they work for you?
Please leave a comment.
No comments:
Post a Comment