opencv存儲圖片
⑴ openCV採集攝像頭圖片並保存的方法
現在在vc上採集視頻常用的方法有三:vfw,directshow,opencv
你是要進行圖像處理的話推薦opencv(具體參考:於仕琪,opencv教程基礎篇中的例3-6,稍作修改,估計就能用於你的工程)
下面貼出我自己編的一個小工程:如有疑問,E-mail:[email protected]
進行opencv的預備操作你要看那本書和逛opencv中文網
如有問題可以和我討論(我也是菜鳥,剛為解決了這個問題竊喜不已)。
1.新建mfc對話框工程,在其中添加一個picture控制項,除了ID以外什麼都不用改
2.在對話框頭文件(沒有Dlg那個)中添加(最好是在「#include "resource.h" // main symbols之後」):
#include "cxcore.h"
#include "cvcam.h"
#include "windows.h"
#include "cv.h"
#include "highgui.h"
3.在工程-》設置-》選擇所有配置-》link(連接)-》對象/庫模塊-》中添加:
kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib cxcore.lib cv.lib ml.lib cvaux.lib highgui.lib cvcam.lib
4.在需要觸發攝像頭顯示的地方添加:
void CVideomfcDlg::OnButton1()
{
// TODO: Add your control notification handler code here
int ncams = cvcamGetCamerasCount( );//返回可以訪問的攝像頭數目
HWND MyWin=::GetDlgItem(m_hWnd,IDC_VIDEO); //獲得控制項句柄(IDC_VIDEO就是圖片控制項)
cvcamSetProperty(0, CVCAM_PROP_ENABLE, CVCAMTRUE); //選擇第一個攝像頭
int width=240;
int height=240;
cvcamSetProperty(0,CVCAM_PROP_WINDOW, &MyWin); // Selects a window for
cvcamSetProperty(0,CVCAM_RNDWIDTH, &width);
cvcamSetProperty(0,CVCAM_RNDHEIGHT, &height);
cvcamSetProperty(0, CVCAM_PROP_CALLBACK, callback1);
//回調函數將處理每一幀
cvcamInit( );
cvcamStart( );
}
5.改變顯示的圖像序列大小,在窗口屬性設定了以後,添加如下代碼:
int width=320; //這個就是需要顯示的窗口大小
int height=240; //根據自己需要選擇
cvcamSetProperty(0,CVCAM_RNDWIDTH, &width);
cvcamSetProperty(0,CVCAM_RNDHEIGHT, &height);
6.在對話框類中添加callback成員函數(注意,在添加函數的時候,一定要選擇static,不選的話你就自己郁悶去吧,反正我是為了這個郁悶了2個禮拜)
void CVideomfcDlg::callback1(IplImage *image)
{
IplImage* image1 = image;
int i,j;
assert (image);
//獲取當前系統時間
SYSTEMTIME st2=;
GetLocalTime(&st2);
char sss[18]=; //這個是用來存儲所要保存的圖片名的,用的是一個笨辦法,先定義,再修改其中的數組值。
sss[7]=st2.wHour/10+48; //獲取系統當前小時
sss[8]=st2.wHour%10+48;
sss[9]=st2.wMinute/10+48; //獲取系統當前分鍾
sss[10]=st2.wMinute%10+48;
sss[11]=st2.wSecond/10+48; //獲取系統當前秒
sss[12]=st2.wSecond%10+48;
cvSaveImage(sss,image1); //使用系統當前時間為名稱(XXXXXX.jpg)存儲圖片
}
ps:你還需要在c盤根目錄下建立一個叫1的文件夾保存圖片。
祝你成功!
⑵ OpenCV中為什麼將一幅圖片改為灰度圖後,灰度圖比原圖像佔用空間大
你原圖像是多大?是否為BMP格式?如果原圖比較小的話,灰度圖可能比24位真彩圖佔用更多空間,這主要是因為灰度圖需要一個顏色表。這似乎違反了直覺,因為人們通常認為灰度圖應該比真彩圖佔用更少的空間。
推薦你使用UltraEdit工具,參考圖片格式來分析這兩個圖片。在UltraEdit中,你可以看到這兩個圖片的詳細信息,包括它們各自的大小和格式。通過這種方式,你可以更直觀地理解為什麼灰度圖可能比原圖佔用更多空間。
在MATLAB中,處理圖像時主要是關注像素點的數值,因此灰度圖的數據量大約為真彩圖的1/3。這是因為灰度圖只包含亮度信息,而真彩圖則包含紅、綠、藍三種顏色的亮度信息。
但當將圖片轉換為灰度圖後,即使沒有顏色表,灰度圖的文件大小可能仍然比原圖大。這是因為顏色表中通常包含大量的顏色信息,即使在灰度圖中,顏色表仍然存在,只是其中的顏色信息較少。
值得注意的是,不同圖像編輯軟體在處理灰度圖時,可能會以不同的方式存儲顏色表。因此,即使在理論上灰度圖應該佔用更少的空間,實際情況可能會有所不同。
綜上所述,灰度圖比原圖佔用更多空間的原因主要有兩個:一是顏色表的存在,二是圖像編輯軟體的存儲方式。