当前位置:首页 » 存储配置 » opencv存储图片

opencv存储图片

发布时间: 2025-05-20 00:16:10

⑴ 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。这是因为灰度图只包含亮度信息,而真彩图则包含红、绿、蓝三种颜色的亮度信息。

但当将图片转换为灰度图后,即使没有颜色表,灰度图的文件大小可能仍然比原图大。这是因为颜色表中通常包含大量的颜色信息,即使在灰度图中,颜色表仍然存在,只是其中的颜色信息较少。

值得注意的是,不同图像编辑软件在处理灰度图时,可能会以不同的方式存储颜色表。因此,即使在理论上灰度图应该占用更少的空间,实际情况可能会有所不同。

综上所述,灰度图比原图占用更多空间的原因主要有两个:一是颜色表的存在,二是图像编辑软件的存储方式。

热点内容
关于五的乘法运算文字脚本 发布:2025-05-20 06:11:22 浏览:683
androidhttp乱码 发布:2025-05-20 06:00:39 浏览:855
拉伸压缩 发布:2025-05-20 05:45:30 浏览:926
阿里云的服务器修建在哪里 发布:2025-05-20 05:44:49 浏览:770
网盘存储文件 发布:2025-05-20 05:32:05 浏览:245
linux网卡的mac 发布:2025-05-20 05:31:13 浏览:7
手机照相机文件夹 发布:2025-05-20 05:29:49 浏览:848
数控车床电脑编程软件 发布:2025-05-20 05:29:42 浏览:966
智能pos如何下载安卓 发布:2025-05-20 05:29:08 浏览:343
防病毒源码 发布:2025-05-20 05:25:00 浏览:927