回答
IplImage * ImageToIplImage(QPixmap * qPix){
int width = (qPix->toImage()).width();
int height =(qPix->toImage()).height();
// Creates a iplImage with 3 channels
IplImage *img = cvCreateImage(cvSize(width, height), IPL_DEPTH_8U, 3);
for(int y=0;y<height;y++)
{
for(int x=0;x<width;x++)
{
QRgb color = qPix->toImage().pixel(x,y);
cvSet2D(img,y,x,cvScalar(qBlue(color),qGreen(color),qRed(color),1));
}
}
return img; }
它的工作!爲什麼不直接使用此感謝法塔赫benmerzoug
它保存到一個文件,然後使用的QImage找回它是一個辦法做到這一點:
// On my system this code can be compiled with:
// g++ qimage_test.cpp -o qimage_test -I/usr/include/qt4 -lQtGui `pkg-config --cflags --libs opencv`
#include <qt4/QtGui/qpainter.h>
#include <highgui.h>
#include <cv.h>
#include <iostream>
int main()
{
IplImage* cv_img = cvLoadImage("coins.jpg", CV_LOAD_IMAGE_UNCHANGED);
if(!cv_img)
{
std::cout << "ERROR: cvLoadImage failed" << std::endl;
return -1;
}
// Process cv_img and then save it on a file on the disk
if (!cvSaveImage("cv_out.jpg", cv_img))
{
std::cout << "ERROR: cvSaveImage failed" << std::endl;
return -1;
}
// Loading OpenCV saved image into QImage
QImage::QImage qt_img("cv_out.jpg");
// Then finally display it, or do something with it.
// Saving it to the disk for testing purposes
qt_img.save("qt_img.jpg");
return 0;
}
我剛剛發現了一個有趣的一段代碼here,它提供了一個功能轉換從IplImage*
到QImage*
。搜索名爲IplImageToQImage()
的函數。
要使用該功能,你可以這樣做:
IplImage* cv_img = cvLoadImage("filename.jpg", CV_LOAD_IMAGE_UNCHANGED);
if(!cv_img)
{
std::cout << "ERROR: cvLoadImage failed" << std::endl;
exit(0);
}
uchar* data = NULL;
QImage* qt_img = IplImageToQImage(cv_img, &data, 0.0, 0.0);
if(!qt_img)
{
std::cout << "ERROR: IplImageToQImage failed" << std::endl;
exit(0);
}
qt_img->save("qimage_output.jpg");
delete qt_img;
我已經找到了與測試,但不知何故它沒有工作對我來說,應用程序完全編譯,但執行後墜毀,我已經找到了問題和它的功能,因爲我正在使用Qt控制檯應用程序,我注意到在CONSOL窗口上的錯誤消息,它是這樣的:OpenCV錯誤:未知函數,文件.. \中的錯誤參數<未知數組類型>。 。\ .. \ .. \ ocv \ opencv \ modules \ core \ src \ matrix.cpp,第641行 – hamza
在發佈之前,我複製了該函數並測試了它,並且它工作正常。 – karlphillip
:
QImage qt_img = (QImage (cv_img->dataIm, cv_img->width, cv_img->height, cv_img->QImage::Format_RGB888)).rgbSwapped();
- 1. 將IplImage轉換爲osg :: Image
- 2. cvMat轉換爲IplImage
- 3. 轉換OpenCV的3(IplImage結構),以PyQt5的QImage/QPixmap的Python中
- 4. 如何將二進制轉換爲qpixmap
- 5. 如何將QPixmap轉換爲矩陣
- 6. 將numpy數組轉換爲PySide QPixmap
- 7. 如何將IplImage轉換爲Mat?
- 8. 如何將IplImage轉換爲GLubyte數組?
- 9. 將矩陣類轉換爲IplImage *
- 10. 將IplImage轉換爲javacv中的BufferedImage
- 11. 如何將IplImage轉換爲lept.PIX
- 12. 將mat轉換爲iplimage *在opencv中
- 13. 將IPLimage轉換爲h.263格式
- 14. 將IplImage *類型轉換爲CvMat
- 15. 將pbm文件轉換爲IplImage
- 16. 如何將IplImage轉換爲char數組
- 17. 將IplImage轉換爲Mat時出錯
- 18. 如何將IplImage *轉換爲cv:Mat *?
- 19. 將IplImage轉換爲javacv中的Mat
- 20. opencv:將Mat轉換爲IplImage問題
- 21. 將拜耳RGGB轉換爲CV iplimage(RGB)
- 22. 將IplImage類型IPL_LABEL轉換爲IplImage類型IPL_DEPTH_8U
- 23. 如何將8位OpenCV IplImage *轉換爲32位IplImage *?
- 24. 轉換NSImage到IplImage
- 25. 錯誤轉換的IplImage **來的IplImage *
- 26. 我的QPixmap分割成3部分後,從IplImage *轉換MacBook Pro與視網膜
- 27. Iphone將IplImage轉換爲UIImage並返回導致旋轉
- 28. Qt - QPixmap轉換爲XML,相反
- 29. 將QPixmap轉換爲SDL_Surface並將其顯示在屏幕上
- 30. opencv的:轉換墊的IplImage爲cvLabel
這種方法的問題在於你假設你的圖像總是有3個通道。如果他們有4個頻道會發生什麼?或1個頻道?如果您在前面引用的網站上注意到,還有一個名爲'QImageToIplImage'的轉換函數。你應該檢查一下。 – karlphillip
它將QPixmap轉換爲IplImage而不是其他方式!1 – Sherif
@karlphillip:如果我們有一個QPixmap,我們如何知道這個QPixmap的通道數? – aviit