国产日韩欧美一区二区三区三州_亚洲少妇熟女av_久久久久亚洲av国产精品_波多野结衣网站一区二区_亚洲欧美色片在线91_国产亚洲精品精品国产优播av_日本一区二区三区波多野结衣 _久久国产av不卡

?

基于Matcom、openCV在VC環(huán)境中的混合編程以及數(shù)據(jù)采集與可視化研究

2012-04-29 05:12蘇小春
電腦知識與技術(shù) 2012年5期
關(guān)鍵詞:數(shù)據(jù)可視化

蘇小春

摘要:詳細(xì)研究了在Microsoft Visual C++ 6.0平臺下圖像采集卡的數(shù)據(jù)采集以及數(shù)據(jù)分析,利用Matcom對數(shù)據(jù)分析結(jié)果在VC界面中進(jìn)行了可視化表達(dá),并利用openCV簡捷的圖像顯示功能對圖像數(shù)據(jù)在VC界面中實(shí)現(xiàn)了其動(dòng)態(tài)顯示。結(jié)合實(shí)例,詳細(xì)介紹了基于Matcom與openCV在VC環(huán)境下的混合編程實(shí)現(xiàn)途徑。結(jié)果表明,利用上述混合編程方法可以極大減輕軟件編寫的工作量,提高軟件開發(fā)效率。

關(guān)鍵詞:VC++;Matcom;openCV;混合編程;數(shù)據(jù)可視化

中圖分類號:TP311文獻(xiàn)標(biāo)識碼:A文章編號:1009-3044(2012)05-1086-03

Research of Mixed Programming with Matcom, openCV and VC++ in Data Acquisition and Visualization

SU Xiao-chun

(Quzhou Secondary Technical School, Quzhou 324000, China)

Abstract: In this paper, a detailed research of data acquisition in image acquisition card and data analysis based on Microsoft Visual C++6.0 platform is presented. Visualization expression of the data analysis result and dynamic display to image data is realized with Matcom and openCV in VC interface. Combined with the example, this paper introduces the method and approach of realizing in VC with Matcom and openCV in detail. The results indicate that this method reduces a great deal of software programming work and improve the efficiency of development.

Key words: VC++; Matcom; openCV; mixed programming; data visualization

Matlab是世界上使用最為廣泛的數(shù)值計(jì)算及圖形處理軟件,但是它具有如下缺點(diǎn):1)由于Matlab使用行解釋方式執(zhí)行代碼,因此它極大的限制了代碼執(zhí)行速度。2)Matlab源程序移植性差,用戶必須在安裝有Matlab的計(jì)算機(jī)上才能執(zhí)行.m文件。3)Matlab執(zhí)行文件是文本文件,因此算法和數(shù)據(jù)的保密性不好。4)Matlab對硬件的支持功能非常有限。而Mathworks公司推出的Matcom (目前最高版本4.5)是Matlab到C/C++的編譯開發(fā)的軟件平臺,是十分有用的.m文件翻譯器,并且它本身就對Matlab的近千個(gè)常用數(shù)學(xué)函數(shù)以及繪圖函數(shù)進(jìn)行了編譯,并將這些函數(shù)封裝在v4501v.lib庫文件中,因此可以方便集成在C/C++的開發(fā)平臺上。

VC++是Microsoft公司推出的強(qiáng)大的可視化集成編程環(huán)境,用它開發(fā)的系統(tǒng)具有界面友好、代碼效率高和執(zhí)行速度快以及對硬件SDK的方便支持等優(yōu)點(diǎn),但是由于VC++是一通用較底層的編程軟件,它不像Matcom那樣可以直接調(diào)用函數(shù)實(shí)現(xiàn)矩陣求逆、快速傅里葉變換、曲線擬合等復(fù)雜數(shù)學(xué)運(yùn)算;另外單一利用VC++實(shí)現(xiàn)二維曲線作圖也非常復(fù)雜,而在Matcom中實(shí)現(xiàn)二維曲線繪制則非常簡便,只需一條plot命令即可。因此,將Matcom嵌入VC++開發(fā)環(huán)境混合編程是實(shí)現(xiàn)復(fù)雜數(shù)學(xué)運(yùn)算與數(shù)據(jù)分析結(jié)果可視化表達(dá)的有效工具[1-4]。

1999年,英特爾公司在IPL(Image Process Library)基礎(chǔ)上在俄羅斯設(shè)立的軟件開發(fā)中心(Software DeveIopment Center)開發(fā)了openCV(Open Source Computer Vision Library),目前最新版本是2.1。OpenCV擁有包括300多個(gè)C/C++函數(shù)的跨平臺的中、高層API,提供了很多數(shù)字圖像處理函數(shù),它不依賴于其它的外部庫,直接通過調(diào)用openCV算法庫,研究人員就可在前人已完成的成熟算法基礎(chǔ)上迅速開展自己的工作,因此openCV使單純用C/C++處理起來很復(fù)雜的操作變得非常容易[5-8]。

本文以維視工業(yè)相機(jī)(MV-1300UM)動(dòng)態(tài)采集顯示以及直方圖曲線繪制為例,利用Matcom在二維顯示方面的獨(dú)特優(yōu)勢將其用于VC界面上直方圖的顯示,并采用openCV快速實(shí)現(xiàn)其圖像動(dòng)態(tài)顯示,從而簡化VC平臺下的數(shù)據(jù)顯示代碼,提高編程效率。

1運(yùn)行環(huán)境設(shè)置

運(yùn)行環(huán)境設(shè)置主要按照以下步驟進(jìn)行:

1)在Microsoft Visual C++6.0中新建基于對話框的應(yīng)用程序;

2)安裝視頻采集卡驅(qū)動(dòng)(本文所采用的相機(jī)為維視MV-1300UM黑白CMOS相機(jī),分辨率1280*1024,USB2.0接口),并將提供的SDK開發(fā)包內(nèi)的include文件和lib文件直接復(fù)制到新建的應(yīng)用程序目錄下;

3)安裝openCV(本文采用版本為openCV1.0),設(shè)目錄為d:openCV1.0;

4)對于Matcom4.5,本文將直接使用其安裝后提供的v4501v.lib庫文件以及matlib.h頭文件,將這兩個(gè)文件復(fù)制到新建的應(yīng)用程序目錄下;

5)將相機(jī)開發(fā)包中的四個(gè)頭文件(HVDAILT.h,HVDef.h,HVUtil.h,Raw2Rgb.h)和庫文件(HVDAILT.lib,HVUtil.lib,Raw2Rgb.lib)增加到對話框應(yīng)用程序工程中;將Matcom4.5的頭文件matlib.h和庫文件v4501v.lib增加到應(yīng)用程序工程中;將openCV下相應(yīng)的頭文件目錄和庫文件目錄通過VC++6.0開發(fā)平臺下的工具>選項(xiàng)>目錄增加到搜索目錄中;

到此位置,VC++和Matcom4.5以及openCV、硬件驅(qū)動(dòng)SDK的接口準(zhǔn)備工作完成,在程序中通過#include相應(yīng)的頭文件即可實(shí)現(xiàn)需要的函數(shù)調(diào)用。

2應(yīng)用舉例

本節(jié)以維視USB相機(jī)為例,詳細(xì)講述其用openCV1.0實(shí)現(xiàn)其相機(jī)圖像采集以及Matcom4.5實(shí)現(xiàn)直方圖動(dòng)態(tài)顯示的步驟。實(shí)現(xiàn)步驟具體分為相機(jī)初始化、圖像采集、圖像顯示以及直方圖計(jì)算與顯示。

首先在應(yīng)用程序?qū)υ捒蝾愔邪韵骂^文件:

#include "cv.h"http:// OpenCV頭文件

#include "highgui.h"http:// OpenCV頭文件

#include "HVDAILT.h"http://相機(jī)驅(qū)動(dòng)文件

#include "HVDef.h"http://相機(jī)驅(qū)動(dòng)文件

#include "HVUtil.h"http://相機(jī)驅(qū)動(dòng)文件

#include "Raw2Rgb.h"http://相機(jī)驅(qū)動(dòng)文件

#include "matlib.h"http:// Matcom頭文件

2.1初始化部分

初始化部分主要包括相機(jī)初始化以及Matcom初始化,相機(jī)初始化主要通過設(shè)備開啟函數(shù)BeginHVDevice,分辨率設(shè)置函數(shù)HV? SetResolution,采集模式函數(shù)HVSetSnapMode,增益控制函數(shù)HVAGCControl,視頻采集窗口函數(shù)HVSetOutputWindow,AD轉(zhuǎn)換等級函數(shù)HVADCControl,采集速度函數(shù)HVSetSnapSpeed以及曝光時(shí)間設(shè)置HVAECControl等函數(shù)來完成,相機(jī)初始化部分我們設(shè)置分辨率為全分辨率即1280*1024,為提高采集速度,設(shè)置采集圖像大小為700*700,其它設(shè)置一般按標(biāo)準(zhǔn)方式設(shè)置。

相機(jī)初始化完成后,需要對Matcom進(jìn)行初始化。Matcom的初始化只需在OnInitDialog函數(shù)下加入一條語句:initM(MAT?

COM_VERSION);

2.2功能實(shí)現(xiàn)部分

此部分主要完成圖像數(shù)據(jù)的采集、顯示以及直方圖繪制,這部分是程序的主體。

2.2.1圖像采集與顯示

圖像采集是通過HVSnapShot函數(shù)實(shí)現(xiàn)單幀采集,在初始化部分,根據(jù)設(shè)置的采集圖像大小分配了700*700bytes的內(nèi)存空間,HVSnapShot函數(shù)將一幀圖像采集到這塊內(nèi)存區(qū)域中(設(shè)其采集到的內(nèi)存變量是m_userBuff),然后用openCV的函數(shù)來實(shí)現(xiàn)其顯示。顯示部分代碼如下:

IplImage* image=cvCreateImageHeader(cvSize(700,700), IPL_DEPTH_8U, 3);

cvSetData(image,m_pseudoColorBuff,700*3);

CDC *pDC=GetDlgItem(IDC_PICTURE)->GetDC();

HDC hdc=pDC->GetSafeHdc();

CRect rect;

GetDlgItem(IDC_PICTURE)->GetClientRect(&rect);

CvvImage cimg;

cvFlip(image, NULL,0); //垂直鏡像翻轉(zhuǎn),與CCD相對應(yīng)

cimg.CopyOf(image,image->nChannels);

cimg.DrawToHDC(hdc,&rect);

其中IDC_PICTURE是圖像控件,此控件的區(qū)域用于顯示圖像。cvSetData是openCV函數(shù),用于將采集到的數(shù)據(jù)裝載到image變量中。采集卡SDK中的ConvertBayer2Rgb函數(shù)可用于灰度到偽彩轉(zhuǎn)換。因此m_pseudoColorBuff是對m_userBuff偽彩轉(zhuǎn)換后的數(shù)據(jù)。

2.2.2圖像直方圖計(jì)算與繪制

圖像直方圖是統(tǒng)計(jì)灰度數(shù)據(jù)中不同灰度值的個(gè)數(shù)。因此直方圖數(shù)據(jù)個(gè)數(shù)為256個(gè),索引號為灰度值,值為相應(yīng)灰度值的統(tǒng)計(jì)總數(shù)。

1)圖像直方圖計(jì)算代碼如下:

int* hist=(LPINT)malloc(sizeof(int)*256);

memset(hist,0x0,256);

for(int m=0;m<700*700;m++)

for(int n=0;n<256;n++)

if(n==*(m_userBuff+m))

{

*(hist+n)++;

break;

本程序段將700*700的灰度圖計(jì)算其直方圖,將直方圖一維矩陣保存在hist變量中。

2)圖像直方圖顯示采用Matcom中的庫函數(shù)來完成。首先在對話框資源中添加一靜態(tài)文本框并將ID改名,在OnInitDialog中獲取其位置屬性(保存在CRect類型的m_ plot變量中),調(diào)用Matcom函數(shù)初始化繪圖區(qū):

mm_h=winaxes(this->m_hWnd);

axesposition(m _plot.left, m _plot.top, m_plot.Width(), m_plot.Height());

xlabel((CL(TM("灰度值"))));

ylabel((CL(TM("統(tǒng)計(jì)數(shù)"))));

title((CL(TM("直方圖"))));

set(mm_h,(CL(TM("Color")),TM("white")));

set(mm_h,(CL(TM("Box")),TM("on")));

grid(TM("On"));

Mm mm_x, mm_y;

x=linspace(0, 255);

y=zeros(1, 256);

mm_plotHandle=plot((CL(mm_x), mm_y, TM("r")));

其中mm_h, mm_plotHandle, mm_x, mm_y是對話框類的成員變量。繪制區(qū)域范圍設(shè)置為靜態(tài)文本框的范圍。

3)直方圖繪制中主要分為數(shù)據(jù)賦值以及曲線繪制,由于直方圖數(shù)據(jù)均為實(shí)數(shù),因此需要將數(shù)據(jù)直接賦給mm_x和mm_y的實(shí)部:

for(int i=0;i<256;i++)

{

mm_x.r(i)=i;

mm_y.r(i)=*(hist+i);

}

曲線繪制只需用set函數(shù)更新其繪圖區(qū)即可:

set(mm_plotHandle, TM("xdata"),mm_x);

set(mm_plotHandle, TM("ydata"),mm_y);

通過以上步驟,我們就實(shí)現(xiàn)了其圖像數(shù)據(jù)的讀入與顯示、直方圖計(jì)算與顯示。通過在對話框類中增加WM_TIMER消息,并將圖像采集與顯示、直方圖繪制代碼放于WM_TIMER消息處理函數(shù)中即可方便的實(shí)現(xiàn)其動(dòng)態(tài)顯示。

2.3程序退出處理

程序退出部分,包括釋放內(nèi)存塊以及關(guān)閉圖像采集卡和退出Matcom環(huán)境,對openCV則無需調(diào)用任何函數(shù)。程序退出代碼如下:

exitM();

HV_VERIFY(EndHVDevice(m_hhv));

該程序已經(jīng)在Windows XP SP3操作系統(tǒng),Mocrosoft Visual C++6.0開發(fā)平臺和openCV1.0以及Matcom4.5上編譯通過并正常運(yùn)行。通過以上步驟,我們實(shí)現(xiàn)了從圖像采集顯示到數(shù)據(jù)分析顯示的完整功能。圖1是其程序界面。

圖1圖像采集顯示與直方圖曲線繪制程序界面

3結(jié)論

詳細(xì)介紹了VC++、openCV以及matcom接口的實(shí)現(xiàn)過程,并以目前工程中常用的硬件采集系統(tǒng)的實(shí)例說明采用此種混合編程的詳細(xì)步驟。結(jié)果表明,采用混合編程的方式可以非常方便的適用于目前大多數(shù)的數(shù)據(jù)采集系統(tǒng)的應(yīng)用程序開發(fā)中,其實(shí)現(xiàn)方法簡單,代碼高效,并且程序移植性好。采用VC與openCV以及Matcom的混合編程方法可以讓我們從繁復(fù)的代碼編寫工作中解脫出來,使我們能將更多的精力放在數(shù)據(jù)的復(fù)雜處理以及算法的實(shí)現(xiàn)上來。提高程序開發(fā)效率以及節(jié)約時(shí)間。

參考文獻(xiàn):

[1]劉維.精通Matoab與C/C++混合程序設(shè)計(jì)[M].2版.北京:北京航空航天大學(xué)出版社,2008.

[2]劉迎,師學(xué)明,陳曉玲,等.VC與MATCOM聯(lián)合編程在數(shù)據(jù)可視化處理中的應(yīng)用[J].工程地球物理學(xué)報(bào),2007,4(5):455-459.

[3]李寶方,關(guān)永,沈孝本,等.基于VC++和Matcom混合編程的函數(shù)最佳擬合的確定[J].計(jì)算機(jī)工程與設(shè)計(jì),2007,28(12):2980-2982.

[4]倪靜靜,王俊璞,金志華,等.利用Matcom和Visual C++實(shí)現(xiàn)卡爾曼濾波的新方法[J].計(jì)算機(jī)應(yīng)用與軟件,2008,5(5):175-176.

[5]于仕琪,劉瑞禎.學(xué)習(xí)OpenCV(中文版)[M].北京:清華大學(xué)出版社,2009.

[6] Landre J.PROGRAMMING WITH INTEL IPP AND INTEL OPENCV[Z].2003.

[7]黎松,平西建,丁益洪.開放源代碼的計(jì)算機(jī)視覺類庫OpenCV的應(yīng)用[J].計(jì)算機(jī)應(yīng)用與軟件,2005,22(8):134-136.

[8]喻擎蒼,翁秀娟,趙勻,等.交互式開放結(jié)構(gòu)計(jì)算機(jī)視覺平臺Ch OpenCV[J].計(jì)算機(jī)工程與應(yīng)用,2006(23):78-81.

猜你喜歡
數(shù)據(jù)可視化
移動(dòng)可視化架構(gòu)與關(guān)鍵技術(shù)綜述
大數(shù)據(jù)時(shí)代背景下本科教學(xué)質(zhì)量動(dòng)態(tài)監(jiān)控系統(tǒng)的構(gòu)建
可視化:新媒體語境下的數(shù)據(jù)、敘事與設(shè)計(jì)研究
我國數(shù)據(jù)新聞的發(fā)展困境與策略研究
基于R語言的大數(shù)據(jù)審計(jì)方法研究
數(shù)據(jù)可視化在新聞生產(chǎn)中的應(yīng)用研究