立體視覺影象對,獲取與儲存
利用DirectShow獲取雙目攝像頭得到的棋盤影象,按s鍵進行儲存:
#include <cstdlib>
#include <iostream>
#include <cv.h>
#include <highgui.h>
#include <cxcore.h>
#include"camerads.h"
const char* win_name="OpenCV";
CCameraDS m_CamDS[2];
IplImage *pFrame1,*pFrame2;
IplImage* Frame,*Rectify_Frame1,*Rectify_Frame2;
CvFont font;
void DrawText(CvRect* roi,char* s,int i)
{
cvSetImageROI(Frame,roi[i]);
switch(i)
{
case 0: cvCopy(pFrame1,Frame); break;
case 1: cvCopy(pFrame2,Frame); break;
case 2: cvCopy(Rectify_Frame1,Frame); break;
case 3: cvCopy(Rectify_Frame2,Frame); break;
}
cvResetImageROI(Frame);
switch(i)
{
case 0: cvPutText(Frame,s,cvPoint(130,315),&font,CV_RGB(0,0,255)); break;
case 1: cvPutText(Frame,s,cvPoint(70,655),&font,CV_RGB(0,0,255)); break;
case 2: cvPutText(Frame,s,cvPoint(550,315),&font,CV_RGB(0,0,255)); break;
case 3: cvPutText(Frame,s,cvPoint(500,655),&font,CV_RGB(0,0,255)); break;
}
}
bool Camera_Info()
{
if(IsWindowVisible(FindWindow(NULL,win_name)));
//獲取攝像頭數目
int m_iCamCount=CCameraDS::CameraCount();
printf("There are %d camera here!\n",m_iCamCount);
if(m_iCamCount!=2)
{
return false;
}
char m_CamName1[30],m_CamName2[30];
int ret1=m_CamDS[0].CameraName(0,m_CamName1,sizeof(m_CamName1));
int ret2=m_CamDS[1].CameraName(0,m_CamName2,sizeof(m_CamName2));
if(ret1>0&&ret2>0)
{
printf("Camera1 name is %s,\nCamera2 name is %s\n",m_CamName1,m_CamName2);
}
else
{
printf("Can not get two camera name\n");
return false;
}
if((! m_CamDS[0].OpenCamera(0, false, 320, 240)) || ((pFrame1 = m_CamDS[0].QueryFrame()) == NULL))
{
printf("Cannot open camera 2\n");
return false;
}
if((! m_CamDS[1].OpenCamera(1, false, 320, 240)) || ((pFrame2 = m_CamDS[1].QueryFrame()) == NULL))
{
printf("Cannot open camera 2\n");
return false;
}
printf("Two Camera is already Initialize\n");
return true;
}
int main(void)
{
//Get Camera Info
bool ret=Camera_Info();
if(!ret)
{
printf("Failed to get camera Information\n");
return false;
}
//Draw the Image Into GUI
char* s[4]={"camera1","camera1_rectify","camera2","camera2_rectify"};
CvRect roi[4];
roi[0]=cvRect(50,50,320,240);
roi[1]=cvRect(470,50,320,240);
roi[2]=cvRect(50,390,320,240);
roi[3]=cvRect(470,390,320,240);
cvInitFont(&font,CV_FONT_HERSHEY_COMPLEX,1.0,1.0,0,1,8);
bool isFirst=true;
int width,height;
cvNamedWindow(win_name);
char c;
char path1[20],path2[20];
int count=1;
while(1)
{
pFrame1=m_CamDS[0].QueryFrame();
pFrame2=m_CamDS[1].QueryFrame();
if(isFirst)
{
width=pFrame1->width;
height=pFrame1->height;
Frame=cvCreateImage(cvSize(pFrame1->width*2+200,pFrame1->height*2+200),pFrame1->depth,pFrame1->nChannels);
Rectify_Frame1=cvCreateImage(cvGetSize(pFrame1),pFrame1->depth,pFrame1->nChannels);
Rectify_Frame2=cvCreateImage(cvGetSize(pFrame2),pFrame2->depth,pFrame2->nChannels);
printf("width=%d,height=%d\n",width,height);
cvSet(Frame,cvScalar(255,255,255,255),0);
isFirst=false;
}
else
{
Rectify_Frame1=pFrame1;
Rectify_Frame2=pFrame2;
for(int i=0;i<4;i++)
DrawText(roi,s[i],i);
cvShowImage(win_name,Frame);
sprintf(path1,"E:\\Img\\l%d.bmp",count);
sprintf(path2,"E:\\Img\\r%d.bmp",count);
//cvShowImage(win_name,Frame);
c=cvWaitKey(300);
if(c=='s') { cvSaveImage(path1,pFrame1); cvSaveImage(path2,pFrame2); count=count+1; }
if(c==27||count>10) break;
}
}
//cvWaitKey(0);
cvDestroyAllWindows();
cvReleaseImage(&Frame);
cvReleaseImage(&Rectify_Frame1);
cvReleaseImage(&Rectify_Frame2);
m_CamDS[0].CloseCamera();
m_CamDS[1].CloseCamera();
return 0;
}
相關文章
- 聚信立報告檢視獲取儲存解決方案
- opencv python 從攝像頭獲取視訊/從檔案獲取視訊 /儲存視訊OpenCVPython
- 雙目立體視覺:五(點雲)視覺
- 計算機影象與視覺入門必備計算機視覺
- 短視訊系統,獲取camera的的影像並儲存
- Photos儲存、獲取、更改照片詳解
- 雙目立體視覺系統精度分析視覺
- sql 2k中的圖片儲存和獲取----引申到檔案儲存和獲取 (轉)SQL
- Excel 讀取圖片並獲取儲存路徑Excel
- SpringData JPA中儲存後重新整理並獲取實體Spring
- 計算機視覺—影象特效(3)計算機視覺特效
- 持久化儲存與HTTP快取持久化HTTP快取
- Matlab - 獲取和儲存檔案路徑選擇對話方塊Matlab
- 直播軟體開發,影像視訊的讀取與儲存,以及呼叫相機拍攝
- 如何獲取HDFS上檔案的儲存位置
- PostgreSQL獲取建表語句儲存過程SQL儲存過程
- redis叢集資料儲存和獲取原理Redis
- shell中獲取儲存過程返回值儲存過程
- GreenPlum 獲取表儲存大小的方法推薦
- 儲存過程獲取表被引用的資訊儲存過程
- VMware 與 SmartX 分散式儲存快取機制淺析與效能對比分散式快取
- 流媒體調研:雲端視訊監控與視覺化對講視覺化
- Halcon6:三維重建和光度立體視覺視覺
- 獲取微信小程式二維碼並且儲存微信小程式
- 獲取在oracleasmlib上hds儲存的多路徑OracleASM
- 獲取某庫某個儲存過程內容儲存過程
- 檔案系統儲存與oracle資料庫儲存對比Oracle資料庫
- springboot利用快取儲存物件從新獲取異常Spring Boot快取物件
- Python讀取、儲存、檢視.mat檔案Python
- MySQL--儲存過程與檢視MySql儲存過程
- 杉巖資料:工業視覺的智慧儲存之道視覺
- Python資料視覺化影象庫MatPlotLib基本影象操作Python視覺化
- php獲取遠端網站圖片並儲存本地PHP網站
- C#中從Clipboard儲存獲取資料的方法C#
- 【機器視覺與影象處理】基於MATLAB的角度計算視覺Matlab
- 部落格一鍵儲存本地exe視覺化介面檔案視覺化
- Android,java,xml,xml讀取與儲存,基於AndroidXML解析與儲存的實現AndroidJavaXML
- 使用HTML5 IndexDB儲存影象和檔案HTMLIndex