国产精品电影_久久视频免费_欧美日韩国产激情_成年人视频免费在线播放_日本久久亚洲电影_久久都是精品_66av99_九色精品美女在线_蜜臀a∨国产成人精品_冲田杏梨av在线_欧美精品在线一区二区三区_麻豆mv在线看

詳解 QT 框架中快速應(yīng)用OpenCV 基于圖片 上篇

移動(dòng)開(kāi)發(fā)
OpenCV 輕量級(jí)而且高效,由一系列 C 函數(shù)和少量 C++ 類(lèi)構(gòu)成,同時(shí)提供了Python、Ruby、MATLAB等語(yǔ)言的接口,實(shí)現(xiàn)了圖像處理和計(jì)算機(jī)視覺(jué)方面的很多通用算法。

QT 框架中快速應(yīng)用OpenCV 是本文要結(jié)束的內(nèi)容,和MFC比較起來(lái),QT的信號(hào)槽機(jī)制比MFC的信號(hào)機(jī)制慢,但是因?yàn)槟芎芎玫膶?shí)現(xiàn)跨平臺(tái),所以我在這里總結(jié)一下可能對(duì)一些人有點(diǎn)用。OpenCV.China論壇上有一個(gè)帖子叫做《在MFC框架中快速應(yīng)用OpenCV》看了后就想結(jié)合QT寫(xiě)一下。

0搭建環(huán)境:OpenCV + QT 4.6

我的實(shí)驗(yàn)是基于VS2008來(lái)做的,QT官方雖然提供了VS2008-add-in的插件,我沒(méi)有用。直接下載器編譯好的庫(kù)文件進(jìn)行配置,OpenCV的在VS2008下面的配置方法Google一下到處都是,這里不再補(bǔ)充。首先需要做的是在VS2008里面你需要使QT下和OpenCV的程序能分別跑起來(lái)。對(duì)于QT在VS的配置其實(shí)挺簡(jiǎn)單,有頭文件和相應(yīng)的鏈接庫(kù),保證調(diào)用的時(shí)候路徑正確,一般就沒(méi)有問(wèn)題了。常用命令行make程序的人應(yīng)該會(huì)很清楚那些IDE只不過(guò)是層畫(huà)皮。

1.顯示圖像

QWidget是QObject下的***個(gè)子類(lèi),使用它顯示圖像會(huì)減少不必要的開(kāi)銷(xiāo)。首先定制一個(gè)自己需要的QWidget:

  1. class myWidget : public QWidget  
  2. {  
  3.   Q_OBJECT  
  4.   public:  
  5.     myWidget(const IplImage *img,QWidget *parent = 0);  
  6.     ~myWidget();  
  7.   protected:  
  8.     void paintEvent(QPaintEvent *e);  
  9.   private:  
  10.     IplImage* iplImg;  
  11.     QImage *qImg;  
  12. }; 

需要繪制一個(gè)圖像,我重載paintEvent(QpaintEvent *e),我在這里面使用QPainter進(jìn)行繪制。

  1. void myWidget::paintEvent(QPaintEvent *e)  
  2. {  
  3.     QPainter painter(this);  
  4.     painter.drawImage(QPoint(5,5),*qImg);  

rawImage(QPoint(5,5),qImg);的作用是將qImg繪制在左上頂點(diǎn)位于QPoint(5,5)處。

這里面有可能兩個(gè)問(wèn)題,***個(gè)問(wèn)題是要顯示的圖片太小,創(chuàng)建的Widget太大,***顯示比較丑陋。這時(shí)可以在此函數(shù)里面獲得qImg的寬高,然后resize一下就好了。另外一個(gè)問(wèn)題是:繪制的時(shí)候使用的是QImage,不是IplImage類(lèi)型。關(guān)于這個(gè)問(wèn)題論壇上有人專(zhuān)門(mén)寫(xiě)了IplImage <-> QImage的轉(zhuǎn)換代碼,我在這里不重復(fù)那個(gè)做法,一是有人已經(jīng)做了,另外處于效率考慮,這里提供另一種方法。

通常同學(xué)們都是用cvLoadImage來(lái)讀圖片,保存在IplImage里面,在這里這個(gè)圖片我們保存在img里面,然后通過(guò)img傳進(jìn)QWidget,然后我new一個(gè)QImage

  1. qImg = new QImage(QSize(img->width,img->height),QImage::Format_RGB888); 

我這里假設(shè)iplImg是RGB格式,且每個(gè)通道大小為8。然后創(chuàng)建一個(gè)IplImage 的文件頭

  1. iplImg = cvCreateImageHeader(cvSize(img.width(),img.height()),8,3); 

此iplImage和QImage的不同之處在于QImage沒(méi)有直接提供創(chuàng)建文件頭的方法,可以通過(guò)如下方式創(chuàng)建只有文件頭數(shù)據(jù)的QImage

  1. qImg = new QImage(QSize(0,0),QImage::Format_RGB888); 

另外兩者的圖像矩陣像素排列有點(diǎn)不同,比如IplImage中的BGR到了QImage中應(yīng)該是RGB,當(dāng)然單通道的灰度圖是一樣的,值得慶幸的是兩者的像素矩陣都是形狀相同的多維數(shù)組。這樣我們可以通過(guò)指針共享這部分?jǐn)?shù)據(jù),一種方法如下:

  1. iplImg->imageData = (char*)qImg.bits(); 

將iplImg的圖像矩陣指到qImg那里,以后我們只需要對(duì)IplImage運(yùn)用opencv里面的函數(shù)進(jìn)行處理,其實(shí)就直接在處理qImg里面的數(shù)據(jù)了。但是現(xiàn)在的圖像數(shù)據(jù)還在img里面,首先得把數(shù)據(jù)搞到手,然后放到iplImg和qImg的共享區(qū)中去,另外將顏色排列以QImage中的RGB順序?yàn)闃?biāo)準(zhǔn)。

  1. if (img->origin == IPL_ORIGIN_TL)  
  2. {  
  3.  cvCopy(img,iplImg,0);  
  4. }  
  5. else  
  6. {  
  7.  cvFlip(img,iplImg,0);  
  8. }  
  9. cvCvtColor(iplImg,iplImg,CV_BGR2RGB); 

實(shí)際上只要做到這里圖片就能顯示了。如下圖所示

[[34241]]

給出myWidget.cpp完整代碼

  1. #include "myWidget.h"  
  2. #include <QtGui\QPainter> 
  3. #include <QtCore\QPoint> 
  4.  
  5. myWidget::myWidget(const IplImage *img,QWidget *parent /* = 0 */) : QWidget(parent)  
  6. {  
  7.   qImg = new QImage(QSize(img->width,img->height),  
  8.    QImage::Format_RGB888);  
  9.  iplImg = cvCreateImageHeader(cvSize(img->width,img->height),  
  10.   8,3);  
  11.  iplImg->imageData = (char*)qImg->bits();  
  12.  
  13.  if (img->origin == IPL_ORIGIN_TL)  
  14.  {  
  15.   cvCopy(img,iplImg,0);  
  16.  }  
  17.  else  
  18.  {  
  19.   cvFlip(img,iplImg,0);  
  20.  }  
  21.  cvCvtColor(iplImg,iplImg,CV_BGR2RGB);  
  22.  this->resize(img->width,img->height);  
  23. }  
  24. myWidget::~myWidget()  
  25. {  
  26.  cvReleaseImage(&iplImg);  
  27.  delete qImg;  
  28. }  
  29. void myWidget::paintEvent(QPaintEvent *e)  
  30. {  
  31.  QPainter painter(this);  
  32.  painter.drawImage(QPoint(0,0),*qImg);  

調(diào)用的代碼很簡(jiǎn)單:

  1. int main(int argc,char* argv[])  
  2. {  
  3.  QApplication app(argc,argv);  
  4.  
  5.  IplImage *img = cvLoadImage("460.jpg",1);  
  6.  if (img)  
  7.  {  
  8.   myWidget *mw = new myWidget(img);  
  9.   mw->show();  
  10.  }  
  11.  int re = app.exec();  
  12.  cvReleaseImage(&img);  
  13.  return re;  

小結(jié):關(guān)于詳解 QT 框架中快速應(yīng)用OpenCV 上篇內(nèi)容介紹完了,希望本文讀你有所幫助,想要深入了解請(qǐng)看:

詳解 QT 框架中快速應(yīng)用OpenCV 基于視頻播放 下篇

責(zé)任編輯:zhaolei 來(lái)源: 網(wǎng)絡(luò)轉(zhuǎn)載
相關(guān)推薦

2011-06-24 16:50:06

QT 框架 OpenCV

2011-06-30 10:09:26

QT Graphics View

2011-07-05 18:32:52

QT 信號(hào) 機(jī)制

2011-06-24 10:21:11

Qt phonon 多媒體

2011-06-28 10:03:37

Qt OpenCV qmake

2011-06-30 10:50:39

Qt OpenCV

2011-09-06 11:08:21

QT播放器Mplayer

2011-07-05 16:59:15

Qt 動(dòng)態(tài) 鏈接庫(kù)

2011-06-23 16:24:21

Qt Embedded 交叉編譯

2011-07-01 14:14:34

Qt 事件

2011-09-07 16:28:46

QT WidgetQWidget

2011-06-14 11:48:38

Webkit QT

2011-06-24 11:03:31

Qt 多線(xiàn)程 線(xiàn)程

2011-06-17 16:47:12

Qt Eclipse Windows

2011-06-17 13:18:17

Qt 文件 類(lèi)

2011-09-09 17:24:39

Qt Webkit模塊

2009-06-19 09:52:46

Acegi安全框架Spring框架

2011-06-29 09:20:41

Qt Embedded Qtopia

2011-06-24 09:13:30

QT SDL

2011-07-19 09:46:38

點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)

欧美年轻男男videosbes| 亚洲美女精品成人在线视频| 成人在线免费高清视频| 欧美日韩调教| 成人午夜黄色影院| 国产一区福利| 亚洲天堂av网| 日韩伦理在线| 欧美区一区二区三区| 在线国产福利网站| 亚洲欧美色一区| xxav视频| 尤物在线观看一区| 日本桃色视频| 依依成人综合视频| 黄色直播在线| 日本www高清视频| 日韩精品一二三四| 另类视频在线观看+1080p| 欧美1区2区3区| yellow视频在线观看一区二区 | 成人高清伦理免费影院在线观看| 欧洲av一区| 日本不卡一二三区黄网| 亚洲一一在线| 国产91精品一区二区麻豆亚洲| 在线视频一区观看| 国产精品一区在线观看你懂的| 国产偷亚洲偷欧美偷精品| 免费看电影在线| 成人在线综合网站| 免费无码毛片一区二三区| 91原创在线视频| 青青草精品视频在线观看| 欧美岛国激情| 亚洲综合色av| 久久激情综合| 黄色影视在线观看| 97久久超碰国产精品电影| 成人免费在线观看视频网站| 亚洲在线视频网站| 日本视频在线| 亚洲最新av在线网站| 激情视频极品美女日韩| 国产在线日韩在线| 国产亚洲一级| 国产91视频一区| 亚洲精品视频在线观看网站| 粉嫩一区二区三区国产精品| 亚洲精品国产精品国自产观看浪潮 | 在线免费av网站| 欧美一级欧美三级在线观看| 一根才成人网| 国产97色在线| 亚洲欧美成人综合| 正在播放亚洲一区| 欧美日韩视频精品二区| 日韩欧美中文第一页| а√天堂在线官网| 日韩在线www| 久草成人资源| 免费看国产精品一二区视频| kk眼镜猥琐国模调教系列一区二区| 成人禁在线观看网站| 精品视频在线看| 国产精品一区二区欧美| 激情影院在线| 你懂的视频欧美| 欧美巨猛xxxx猛交黑人97人| 麻豆免费在线| 一区二区自拍| 久久久7777| 激情黄产视频在线免费观看| 久久久精品一区| 天堂网在线观看国产精品| 亚洲一级黄色片| 国产99久久| 久久综合电影一区| 久久精品av| 无码熟妇人妻av在线电影| 亚洲午夜在线视频| 欧美精品第三页| 日韩欧美在线中文字幕| av在线播放一区| 欧美大片在线观看| 一区二区三区国产好| 国产视频一区二区不卡| 99久久免费国产| 免费黄网在线观看| 日本精品视频在线观看| 国产一区视频在线看| 青青国产在线| 久久999免费视频| 日韩 欧美一区二区三区| 免费高清在线| 精品中文字幕在线| 久久精选视频| 一二三四社区在线视频6| 日韩亚洲成人av在线| 9久re热视频在线精品| 视频免费观看| 欧美国产亚洲精品久久久8v| 国产伦精品一区二区三区免费迷| 9191在线观看| 成人激情视频在线播放| 欧美激情在线一区二区| 欧美色999| 椎名由奈jux491在线播放| 欧美日韩中字一区| 成人在线免费观看91| 午夜免费福利在线| xvideos亚洲| 国内精品伊人久久久久av一坑| 在线观看a视频| 成人国产精品一区| 一区二区三区中文免费| 国产精品对白| 亚洲欧美日韩综合网| 美女久久久久久久| av电影天堂一区二区在线观看| 亚洲天堂手机| 日本福利视频网站| 亚洲男人第一网站| 国产剧情一区二区| av久久网站| 亚洲乱码中文字幕久久孕妇黑人| 中文字幕日韩在线视频| 91福利精品在线观看| 亚洲aⅴ天堂av在线电影软件| 色婷婷综合久久久中文一区二区| 国产精品男女| xxxx一级片| 国内精品视频久久| 亚洲国产精品国自产拍av| 日韩黄色av| wwwcom羞羞网站| 国产精品视频永久免费播放| 亚洲国产精品一区二区www在线| 欧美日韩色图| 日韩欧美在线番号| 国产福利一区二区三区在线观看| 视频一区中文字幕国产| 黄色网址免费在线观看| 欧美日韩天天操| 亚洲第一精品福利| 国产成人精品免费| 欧美成人一级| 久播影院第一理论片| 成人美女av在线直播| 色噜噜狠狠成人中文综合| 亚洲欧美日韩专区| 精品极品在线| 国产精品秘入口18禁麻豆免会员| 九九九热精品免费视频观看网站| 国产精品沙发午睡系列990531| 欧美一区二区少妇| 国产成人看片| 亚洲国产成人91精品| 国产一区二区三区国产| 国产精品毛片无码| 全部孕妇毛片丰满孕妇孕交| 91久久久一线二线三线品牌| 欧美一区二区三区电影| 成人高清视频在线| 加勒比久久综合| а√资源新版在线天堂| av在线com| 国产精品高清网站| 欧美一区二区三区视频在线观看| 国产成人精品三级| 在线日本制服中文欧美| 成人高清在线| 欧美在线视频免费播放| 久久这里有精品15一区二区三区| 欧亚在线中文字幕免费| 国产wwwxx| 国内精品一区二区| 在线观看久久久久久| 亚洲综合色视频| 久久亚洲精选| 亚洲综合影院| 黄视频网站在线| 免费看a级黄色片| 精品免费视频123区| 久久久国产精品亚洲一区| 午夜激情一区二区三区| 黄色资源网久久资源365| 免费观看久久av| 嗯啊主人调教在线播放视频| yy4480电影网| 午夜老司机精品| 国产91精品久久久久久| 日韩欧美中文字幕精品| 自拍偷拍亚洲综合| 日本在线不卡一区| 日韩av网站在线免费观看| 天堂av在线电影| 老司机很黄的视频免费| eeuss中文| 国产高清在线精品一区二区三区|