精华内容
下载资源
问答
  • QT+OpenCV调用大恒相机进行实时采集和单帧采集,包括Ui设计等,需要提前配置好大恒SDK,网上有教程。
  • 此程序用于opencv相机(单)调用大恒水星相机,适宜版本是opencv2.xx
  • 在VS2017环境下,通过OpenCV大恒提供的SDK按照IP、MAC地址或序列号打开指定型号的相机,并通过回调和直接采集两种方式获取图像,并将获取的图像保存成OpenCV的Mat格式。对于同一台电脑上连接多台相机的情况,可以...
  • 在Ubuntu中用Qt基于OpenCV调用大恒相机前言一、在Ubuntu中安装大恒相机驱动二、Qt中设置环境 前言 视觉萌新买了工业相机却不会用,上网也查不到具体方法,没办法只能自己硬刚了。刚开始自己摸索,碰到好多问题解决...

    在Ubuntu中用Qt基于OpenCV调用大恒相机

    前言

    • 视觉萌新买了工业相机却不会用,上网也查不到具体方法,没办法只能自己硬刚了。刚开始自己摸索,碰到好多问题解决不了,Qt报错不知道咋回事,缺少的链接库一下载就是无法固定软件位置,还以为自己的系统有问题。
    • 还好买相机时商家给了相机使用方法的相关文件,在我几乎绝望的时候,硬是把相关文件全部翻了一遍,才搞明白到底咋用。在安装好相机驱动后的文件夹中有详细的教程,还有相关例程。
    • 我针对自己的配置过程进行了步骤总结,请大家按需所取吧。
    • 由于自己不认真看人家的资料,浪费了好长时间,网上的相关教程又很少。于是我就编写了这篇文章,分享自己的经历,让更多的人少走弯路,我觉得很有意义。

    前提:已经安装并配置好了OpenCV和Qt,且写好了调用相机的源文件

    一、在Ubuntu中安装大恒相机驱动

    1. 首先打开商家给的文件夹,将相机驱动安装包解压后移动到ubuntu中
      文件名:DAHENG_GigE_USB3_Linux_X86_20181107_CN-EN.tar
      (压缩包中的readme.txt有安装步骤 英文版)

      在这里插入图片描述

    2. 以管理员身份为安装包文件添加所有读写操作

    	su root
    	密码:
    	chmod 777 xxx.bin
    
    1. 运行安装包
    	./xxx.bin
    
    • 安装脚本会自动在/usr/local/下创建工作目录,并在/usr/lib/下创建动态库的链接文件。

    • 安装脚本自动注册GENICAM_ROOT_V2_3、LD_LIBRARY_PATH、GENICAM_GENTLxx_PATH、GENICAM_CACHE_V2_3环境变量 。

    • 当安装脚本提示:
      "SDK install successs!"
      "Driver install success!"
      "Please restart the current terminal..."
      说明安装成功,重启终端后开始使用SDK 。

    • 安装脚本会加载摄像机的驱动程序,若重启电脑后,没有自动加载驱动,则需要手动加载驱动;如果内核版本不匹配,则需要您进入driver目录,选择一个与您正在使用的内核版本最接近的驱动版本进行手动安装,当提示“Driver install success!”,说明加载成功,请您重启终端后使用SDK,无需再次运行安装文件 。

    注:
    1. 环境变量在重启当前终端后生效!
    2. 由于GENICAM不支持中文,请勿将sdk安装到含有中文的路径中,会导致程序运行时产生异常报错 。
    3. 若移动或重命名安装程序后的文件夹,会导致环境变量无效,需重新执行安装程序 。

    二、Qt中设置环境

    1. 新建工程DH_test,将所需头文件及源文件添加进工程。
    2. 设置环境变量
      ①、点击Qt界面左侧的项目
      ②、找到Build中的构建环境,点击“详情”
      ③、在命令窗口中输入命令env查找变量路径
      ④、将GENICAM_ROOT_V2_3和GENICAM_GENTLxx_PATH添加到Qt的环境中

    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    (注意:路径末尾不要有空格否则编译时会报错)

    1. 修改.pro文件
    		#依赖库:
    		LIBS +=  
    		/usr/local/lib/lib*  \
    		-lgxiapi -ldximageproc\
    		-L$(GENICAM_ROOT_V2_3)/bin/Linux64_x64 \
    		-lGCBase_gcc40_v2_3 -lGenApi_gcc40_v2_3 -llog4cpp_gcc40_v2_3 -lLog_gcc40_v2_3 -lMathParser_gcc40_v2_3 
    		
    		#头文件搜索路径:
    		INCLUDEPATH += $(GENICAM_ROOT_V2_3)/library/CPP/include
    		INCLUDEPATH += $(GENICAM_ROOT_V2_3)/…/…/sdk/include
    		INCLUDEPATH += /usr/local/include \
    					  /usr/local/include/opencv \
    					  /usr/local/include/opencv2
    
    
    1. 编译成功后需要在命令窗中以管理员身份运行生成的文件
      (不要忘记插上相机)
    ./DH_test
    
    1. 遇到问题后请自行查找安装目录中的相关文件

    在这里插入图片描述

    展开全文
  • 一、首先搭建vs环境,这里主要介绍怎么配置大恒图像的水星二代的sdk a) 新建空项目,选择项目->属性->VC++目录->包含目录,添加下列两个inc文件(来源于官网下载的驱动软件的sample里) b) 选择项目-&...

    一、首先搭建vs环境,这里主要介绍怎么配置大恒图像的水星二代的sdk

    a) 新建空项目,选择项目->属性->VC++目录->包含目录,添加下列两个inc文件(来源于官网下载的驱动软件的sample里)

    在这里插入图片描述

    b) 选择项目->属性->VC++目录->库目录,添加下列两个lib文件,注意要写\x64,因为lib文件下有两个版本

    在这里插入图片描述

    c) 选择项目->链接器->输入->附加依赖项,添加
    DxImageProc.lib
    GxIAPI.lib
    GxIAPICPPEx.lib

    在这里插入图片描述
    二、源文件新建一个test.cpp,复制下列代码,注意代码下面有注意事项

    // An highlighted block
    #include "stdlib.h"
    #include <iostream>
    #include <opencv2/opencv.hpp>
    //using namespace cv;
    using namespace std;
    #include <GalaxyIncludes.h>
    int j = 0;
    
    cv::Mat img;
    //用户继承掉线事件处理类
    class CSampleDeviceOfflineEventHandler : public IDeviceOfflineEventHandler
    {
    public:
    	void DoOnDeviceOfflineEvent(void* pUserParam)
    	{
    		cout << "收到设备掉线事件!" << endl;
    	}
    };
    
    //用户继承属性更新事件处理类
    
    class CSampleFeatureEventHandler : public IFeatureEventHandler
    {
    public:
    	void DoOnFeatureEvent(const GxIAPICPP::gxstring&strFeatureName, void* pUserParam)
    	{
    		cout << "收到曝光结束事件!" << endl;
    	}
    };
    
    //用户继承采集事件处理类
    class CSampleCaptureEventHandler : public ICaptureEventHandler
    {
    public:
    	void DoOnImageCaptured(CImageDataPointer&objImageDataPointer, void* pUserParam)
    	{
    		cout << "收到一帧图像!" << endl;
    		cout << "ImageInfo: " << objImageDataPointer->GetStatus() << endl;
    		cout << "ImageInfo: " << objImageDataPointer->GetWidth() << endl;
    		cout << "ImageInfo: " << objImageDataPointer->GetHeight() << endl;
    		cout << "ImageInfo: " << objImageDataPointer->GetPayloadSize() << endl;
    
    		img.create(objImageDataPointer->GetHeight(), objImageDataPointer->GetWidth(), CV_8UC3);
    		void *pRGB24Buffer = NULL;
    		//假设原始数据是BayerRG8图像
    		pRGB24Buffer = objImageDataPointer->ConvertToRGB24(GX_BIT_0_7, GX_RAW2RGB_NEIGHBOUR, true);
    		memcpy(img.data, pRGB24Buffer, (objImageDataPointer->GetHeight()) * (objImageDataPointer->GetWidth()) * 3);
    		cv::flip(img, img, 0);
    		j++;
    		char st[100];
    		sprintf_s(st, 100, "%s%d%s", "D:/桌面/cvt/", j, ".bmp");
    		cv::imwrite(st, img);
    		cv::imshow("sss", img);
    		cv::waitKey(1);
    
    		cout << "帧数:" << objImageDataPointer->GetFrameID() << endl;
    	}
    };
    
    int main(int argc, char* argv[])
    {
    
    	//声明事件回调对象指针
    	IDeviceOfflineEventHandler* pDeviceOfflineEventHandler = NULL;///<掉线事件回调对象
    	IFeatureEventHandler* pFeatureEventHandler = NULL;///<远端设备事件回调对象
    	ICaptureEventHandler* pCaptureEventHandler = NULL;///<采集回调对象
    
    	//初始化
    	IGXFactory::GetInstance().Init();
    
    	for (int i = 0; i < 1; i++)
    	{
    		gxdeviceinfo_vector vectorDeviceInfo;
    		IGXFactory::GetInstance().UpdateDeviceList(1000, vectorDeviceInfo);
    		if (0 == vectorDeviceInfo.size())
    		{
    			cout << "无可用设备!" << endl;
    			break;
    		}
    		//打开第一台设备以及设备下面第一个流
    		CGXDevicePointer ObjDevicePtr = IGXFactory::GetInstance().OpenDeviceBySN(
    			vectorDeviceInfo[0].GetSN(),
    			GX_ACCESS_EXCLUSIVE);
    		CGXStreamPointer ObjStreamPtr = ObjDevicePtr->OpenStream(0);
    		//注册设备掉线事件【目前只有千兆网系列相机支持此事件通知】
    		GX_DEVICE_OFFLINE_CALLBACK_HANDLE hDeviceOffline = NULL;
    		pDeviceOfflineEventHandler = new CSampleDeviceOfflineEventHandler();
    		hDeviceOffline = ObjDevicePtr->RegisterDeviceOfflineCallback(pDeviceOfflineEventHandler, NULL);
    		//获取远端设备属性控制器
    		CGXFeatureControlPointer ObjFeatureControlPtr = ObjDevicePtr->GetRemoteFeatureControl();
    		//注册远端设备事件:曝光结束事件【目前只有千兆网系列相机支持曝光结束事件】
    		//选择事件源
    		ObjFeatureControlPtr->GetEnumFeature("EventSelector")->SetValue("ExposureEnd");
    		//使能事件
    		ObjFeatureControlPtr->GetEnumFeature("EventNotification")->SetValue("On");
    		GX_FEATURE_CALLBACK_HANDLE hFeatureEvent = NULL;
    		pFeatureEventHandler = new CSampleFeatureEventHandler();
    		hFeatureEvent = ObjFeatureControlPtr->RegisterFeatureCallback(
    			"EventExposureEnd",
    			pFeatureEventHandler,
    			NULL);
    		//注册回调采集
    		pCaptureEventHandler = new CSampleCaptureEventHandler();
    		ObjStreamPtr->RegisterCaptureCallback(pCaptureEventHandler, NULL);
    		//发送开采命令
    		ObjStreamPtr->StartGrab();
    		ObjFeatureControlPtr->GetCommandFeature("AcquisitionStart")->Execute();
    		//此时开采成功,控制台打印信息,直到输入任意键继续
    		getchar();
    		//发送停采命令
    		ObjFeatureControlPtr->GetCommandFeature("AcquisitionStop")->Execute();
    		ObjStreamPtr->StopGrab();
    		//注销采集回调
    		ObjStreamPtr->UnregisterCaptureCallback();
    		//注销远端设备事件
    		ObjFeatureControlPtr->UnregisterFeatureCallback(hFeatureEvent);
    		//注销设备掉线事件
    		ObjDevicePtr->UnregisterDeviceOfflineCallback(hDeviceOffline);
    		//释放资源
    		ObjStreamPtr->Close();
    		ObjDevicePtr->Close();
    	}
    	
    
    	//反初始化库
    	IGXFactory::GetInstance().Uninit();
    
    	//销毁事件回调指针
    	if (NULL != pCaptureEventHandler)
    	{
    		delete pCaptureEventHandler;
    		pCaptureEventHandler = NULL;
    	}
    	if (NULL != pDeviceOfflineEventHandler)
    	{
    		delete pDeviceOfflineEventHandler;
    		pDeviceOfflineEventHandler = NULL;
    	}
    	if (NULL != pFeatureEventHandler)
    	{
    		delete pFeatureEventHandler;
    		pFeatureEventHandler = NULL;
    	}
    	return 0;
    
    }
    
    
    

    注意:如果报标识符错误,在对应Gxsmartptr.h头文件添加
    #include “GalaxyException.h”

    展开全文
  • opencv读取大恒相机

    千次阅读 2019-01-05 11:50:09
    大恒相机真的是坑,如果你想连续保存保存图像基本会蓝屏,至于原因我还在找,感觉它的sdk做的不是很人性化,怎么说呢,用opencv读图像一点问题没有,显示也没有,但是想要连续保存就会蓝屏,真的不是很懂。...

    大恒相机真的是坑,如果你想连续保存保存图像基本会蓝屏,至于原因我还在找,感觉它的sdk做的不是很人性化,怎么说呢,用opencv读图像一点问题没有,显示也没有,但是想要连续保存就会蓝屏,真的不是很懂。

    我用的代码几乎就是sdk里面doc文档的c++,但是怎么用opencv来读取图像呢,需要用到memcpy这个内存拷贝函数,代码如下

    Mat curr(objImageDataPointer->GetHeight(), objImageDataPointer->GetWidth(), CV_8UC1);
    void* pRaw8Buffer = NULL;
    pRaw8Buffer = objImageDataPointer->ConvertToRaw8(GX_BIT_0_7);
    memcpy(curr.data, pRaw8Buffer, (objImageDataPointer->GetHeight())*(objImageDataPointer->GetWidth()));
    flip(curr, curr, 0);

    这样就可以将存储数据转到mat上了,然后就可以显示了。但是想要连续保存,我用imwrite进行连续保存在关闭终端会蓝屏。。。难受啊。。。

    好了,下面给出代码,基本参考它的工程示例

    #include <iostream>
    #include <opencv2/core/core.hpp>
    #include <opencv2/highgui/highgui.hpp>
    #include <opencv2/imgproc/imgproc.hpp>
    #include <opencv2/calib3d/calib3d.hpp>
    #include "stdlib.h"
    #include <fstream>
    using namespace std;
    using namespace cv;
    int j = 0;
    //请用户提前配置好工程头文件目录,需要包含GalaxyIncludes.h
    #include <GalaxyIncludes.h>
    //用户继承掉线事件处理类
    class CSampleDeviceOfflineEventHandler : public IDeviceOfflineEventHandler
    {
    public:
    	void DoOnDeviceOfflineEvent(void* pUserParam)
    	{
    		cout << "收到设备掉线事件!" << endl;
    	}
    };
    //用户继承属性更新事件处理类
    class CSampleFeatureEventHandler : public IFeatureEventHandler
    {
    public:
    	void DoOnFeatureEvent(const GxIAPICPP::gxstring&strFeatureName, void* pUserParam)
    	{
    		cout << "收到曝光结束事件!" << endl;
    	}
    };
    
    //用户继承采集事件处理类
    class CSampleCaptureEventHandler : public ICaptureEventHandler
    {
    public:
    	void DoOnImageCaptured(CImageDataPointer&objImageDataPointer, void* pUserParam)
    	{
    		cout << "收到一帧图像!" << endl;
    		cout << "ImageInfo: " << objImageDataPointer->GetStatus() << endl;
    		cout << "ImageInfo: " << objImageDataPointer->GetWidth() << endl;
    		cout << "ImageInfo: " << objImageDataPointer->GetHeight() << endl;
    		cout << "ImageInfo: " << objImageDataPointer->GetPayloadSize() << endl;
    		Mat curr(objImageDataPointer->GetHeight(), objImageDataPointer->GetWidth(), CV_8UC1);
    		void* pRaw8Buffer = NULL;
    		pRaw8Buffer = objImageDataPointer->ConvertToRaw8(GX_BIT_0_7);
    		memcpy(curr.data, pRaw8Buffer, (objImageDataPointer->GetHeight())*(objImageDataPointer->GetWidth()));
    		flip(curr, curr, 0);
    		j++;
    		char st[30];
    		sprintf_s(st, 30, "%s%d%s", "./photo/", j, ".bmp");
    		imwrite(st, curr);
    		imshow("h", curr);
    		waitKey(1);
    		cout << "zhenshu" << objImageDataPointer->GetFrameID() << endl;
    	}
    };
    
    int main(int argc, char* argv[])
    {
    	//声明事件回调对象指针
    	IDeviceOfflineEventHandler* pDeviceOfflineEventHandler = NULL;///<掉线事件回调对象
    	IFeatureEventHandler* pFeatureEventHandler = NULL;///<远端设备事件回调对象
    	ICaptureEventHandler* pCaptureEventHandler = NULL;///<采集回调对象
    //初始化
    	IGXFactory::GetInstance().Init();
    	for (int i = 0;i<1; i++)
    	{
    		gxdeviceinfo_vector vectorDeviceInfo;
    		IGXFactory::GetInstance().UpdateDeviceList(1000, vectorDeviceInfo);
    		if (0 == vectorDeviceInfo.size())
    		{
    			cout << "无可用设备!" << endl;
    			break;
    		}
    		//打开第一台设备以及设备下面第一个流
    		CGXDevicePointer ObjDevicePtr = IGXFactory::GetInstance().OpenDeviceBySN(
    			vectorDeviceInfo[0].GetSN(),
    			GX_ACCESS_EXCLUSIVE);
    		CGXStreamPointer ObjStreamPtr = ObjDevicePtr->OpenStream(0);
    		//注册设备掉线事件【目前只有千兆网系列相机支持此事件通知】
    		GX_DEVICE_OFFLINE_CALLBACK_HANDLE hDeviceOffline = NULL;
    		pDeviceOfflineEventHandler = new CSampleDeviceOfflineEventHandler();
    		hDeviceOffline = ObjDevicePtr->RegisterDeviceOfflineCallback(pDeviceOfflineEventHandler, NULL);
    		//获取远端设备属性控制器
    		CGXFeatureControlPointer ObjFeatureControlPtr = ObjDevicePtr->GetRemoteFeatureControl();
    		//注册远端设备事件:曝光结束事件【目前只有千兆网系列相机支持曝光结束事件】
    		//选择事件源
    		ObjFeatureControlPtr->GetEnumFeature("EventSelector")->SetValue("ExposureEnd");
    		//使能事件
    		ObjFeatureControlPtr->GetEnumFeature("EventNotification")->SetValue("On");
    		GX_FEATURE_CALLBACK_HANDLE hFeatureEvent = NULL;
    		pFeatureEventHandler = new CSampleFeatureEventHandler();
    		hFeatureEvent = ObjFeatureControlPtr->RegisterFeatureCallback(
    			"EventExposureEnd",
    			pFeatureEventHandler,
    			NULL);
    		//注册回调采集
    		pCaptureEventHandler = new CSampleCaptureEventHandler();
    		ObjStreamPtr->RegisterCaptureCallback(pCaptureEventHandler, NULL);
    		//发送开采命令
    		ObjStreamPtr->StartGrab();
    		ObjFeatureControlPtr->GetCommandFeature("AcquisitionStart")->Execute();
    		//此时开采成功,控制台打印信息,直到输入任意键继续
    		getchar();
    		//发送停采命令
    		ObjFeatureControlPtr->GetCommandFeature("AcquisitionStop")->Execute();
    		ObjStreamPtr->StopGrab();
    		//注销采集回调
    		ObjStreamPtr->UnregisterCaptureCallback();
    		//注销远端设备事件
    		ObjFeatureControlPtr->UnregisterFeatureCallback(hFeatureEvent);
    		//注销设备掉线事件
    		ObjDevicePtr->UnregisterDeviceOfflineCallback(hDeviceOffline);
    		//释放资源
    		ObjStreamPtr->Close();
    		ObjDevicePtr->Close();
    	}
    	//反初始化库
    	IGXFactory::GetInstance().Uninit();
    	//销毁事件回调指针
    	if (NULL != pCaptureEventHandler)
    	{
    		delete pCaptureEventHandler;
    		pCaptureEventHandler = NULL;
    	}
    	if (NULL != pDeviceOfflineEventHandler)
    	{
    		delete pDeviceOfflineEventHandler;
    		pDeviceOfflineEventHandler = NULL;
    	}
    	if (NULL != pFeatureEventHandler)
    	{
    		delete pFeatureEventHandler;
    		pFeatureEventHandler = NULL;
    	}
    	return 0;
    }
    

    我这个是连续保存多张,但是会蓝屏,直接将imwrite函数删了就不会了。。。

    最后吐槽一下,国产相机的sdk开发都比较麻烦,但是便宜,只不过国外的相机直接插上就能用还是很不错的。。。

    然后呢,我现在采用调用单帧采集循环来实现采集功能,这样就不会担心因为内存泄露而崩溃啦,真的很奇怪,大恒自己的回调采集居然会和opencv有这么强的不兼容。。。

     

    //博主一天后归来

    经过看代码,发现其实是博主自己的问题,代码在进行回调采集后面有一个getchar()函数,用来等待我们进行输入字符来使程序进行向下执行从而跳出回调采集,所以一般只要在终端输入回车就ok了。。

    //博主zz。。。

     

     

     

     

    下面给出通过重复循环单帧来达到采集功能

    #include <iostream>
    #include <pcl/io/pcd_io.h>
    #include <pcl/point_types.h>
    #include <pcl/filters/voxel_grid.h>
    #include <pcl/visualization/cloud_viewer.h>
    #include <pcl/visualization/pcl_visualizer.h>
    #include <opencv2/core/core.hpp>
    #include <opencv2/highgui/highgui.hpp>
    #include <opencv2/imgproc/imgproc.hpp>
    #include <opencv2/calib3d/calib3d.hpp>
    #include "stdlib.h"
    #include <fstream>
    using namespace std;
    using namespace cv;
    
    //请用户提前配置好工程头文件目录,需要包含GalaxyIncludes.h
    #include <GalaxyIncludes.h>
    
    int main()
    {
    	IGXFactory::GetInstance().Init();
    	//枚举设备
    	GxIAPICPP::gxdeviceinfo_vector vectorDeviceInfo;
    	IGXFactory::GetInstance().UpdateDeviceList(1000, vectorDeviceInfo);
    	if (vectorDeviceInfo.size() > 0)
    	{
    		//打开设备
    		CGXDevicePointer ObjDevicePtr = IGXFactory::GetInstance().OpenDeviceBySN(
    			vectorDeviceInfo[0].GetSN(),
    			GX_ACCESS_EXCLUSIVE);
    		CGXStreamPointer ObjStreamPtr = ObjDevicePtr->OpenStream(0);
    		//开启流通道采集
    		ObjStreamPtr->StartGrab();
    		//给设备发送开采命令
    		CGXFeatureControlPointer objFeatureControlPtr = ObjDevicePtr->GetRemoteFeatureControl();
    		objFeatureControlPtr->GetCommandFeature("AcquisitionStart")->Execute();
            //并不需要用到此循环其实。。。它回调采集内部就是已经做成循环了
    		for (int i = 0; i < 5; i++)
    		{
    			//采单帧
    			CImageDataPointer objImageDataPtr;
    			objImageDataPtr = ObjStreamPtr->GetImage(500);//超时时间使用500ms,用户可以自行设定
    			if (objImageDataPtr->GetStatus() == GX_FRAME_STATUS_SUCCESS)
    			{
    				//采图成功而且是完整帧,可以进行图像处理...
    				cout << "收到一帧图像!" << endl;
    				cout << "ImageInfo: " << objImageDataPtr->GetStatus() << endl;
    				cout << "ImageInfo: " << objImageDataPtr->GetWidth() << endl;
    				cout << "ImageInfo: " << objImageDataPtr->GetHeight() << endl;
    				cout << "ImageInfo: " << objImageDataPtr->GetPayloadSize() << endl;
    				void* pRaw8Buffer = NULL;
    				//假设原始数据是Mono8图像
    				pRaw8Buffer = objImageDataPtr->ConvertToRaw8(GX_BIT_0_7);
    				Mat curr(objImageDataPtr->GetHeight(), objImageDataPtr->GetWidth(), CV_8UC1);
    				memcpy(curr.data, pRaw8Buffer, (objImageDataPtr->GetHeight())*(objImageDataPtr->GetWidth()));
    				char st[30];
    				sprintf_s(st, 30, "%s%d%s", "./photo/", i, ".bmp");
    				imwrite(st, curr);
    				waitKey(15);
    			}
    		}
    		//停采
    		objFeatureControlPtr->GetCommandFeature("AcquisitionStop")->Execute();
    		ObjStreamPtr->StopGrab();
    		//关闭流通道
    		ObjStreamPtr->Close();
    	}
    
    	IGXFactory::GetInstance().Uninit();
    	system("pause");
    	return 0;
    }

    好啦,这样就可以愉快的利用工业级相机来进行图像处理并且连续保存了,现在的感受是,便宜还是便宜的好,只不过开发sdk比较吃力,毕竟这么便宜的工业相机还是可以的嘛,支持一下国产吼吼吼。。。恩。。。真香。

    最后总结,还是一句话,sdk写的其实很完善,文档一定要好好看。。。

    展开全文
  • Python调用大恒相机录制视频(Ubuntu16.04) 文章目录Python调用大恒相机录制视频(Ubuntu16.04)环境配置视频录制代码问题解答 环境配置 驱动安装:...

    Python调用大恒相机录制视频(Ubuntu16.04)

    环境配置

    驱动安装:https://blog.csdn.net/liuzongyuan1996/article/details/104219550
    API安装:https://blog.csdn.net/liuzongyuan1996/article/details/104221841
    opencv-python安装:

    sudo pip3 install opencv-python
    

    视频录制代码

    # !/home/liu/miniconda3/envs/dahengcamera/bin/python 
    # coding=utf-8
    
    import cv2  # 导入opencv包
    import gxipy as gx # 导入大恒相机Python包
    import time
    
    # 打开设备
    # 枚举设备
    device_manager = gx.DeviceManager() 
    dev_num, dev_info_list = device_manager.update_device_list()
    if dev_num == 0:
        sys.exit(1)
    # 获取设备基本信息列表
    str_sn = dev_info_list[0].get("sn")
    # 通过序列号打开设备
    cam = device_manager.open_device_by_sn(str_sn)
    # 导入配置信息
    # cam.import_config_file("./import_config_file.txt")
    # 开始采集
    cam.stream_on()
    
    # 视频存储的格式 
    fourcc = cv2.VideoWriter_fourcc(*'XVID' )
    # 帧率
    fps = cam.AcquisitionFrameRate.get()  
    # 视频的宽高
    size = (cam.Width.get(),cam.Height.get())
    print(cam.Width.get(),cam.Height.get())
    # 文件名定义
    filename = '/home/liu/DaHengCamera/Video/video_'+time.strftime("%Y%m%d_%H%M%S", time.localtime())+'.avi'
    #视频存储
    out = cv2.VideoWriter(filename, fourcc, fps, size)
      
    while out.isOpened():
        raw_image = cam.data_stream[0].get_image()    # 使用相机采集一张图片
        rgb_image = raw_image.convert("RGB")    # 从彩色原始图像获取 RGB 图像
        numpy_image = rgb_image.get_numpy_array()   # 从 RGB 图像数据创建 numpy 数组
        if rgb_image is None:
            continue
        numpy_image = cv2.cvtColor(numpy_image, cv2.COLOR_RGB2BGR)  # opencv采用的是BGR图像, 讲RGB转为BGR
        cv2.namedWindow('video',cv2.WINDOW_NORMAL)#创建一个名为video的窗口
        cv2.imshow('video',numpy_image)   # 将捕捉到的图像在video窗口显示
        out.write(numpy_image)    # 将捕捉到的图像存储
    
        #按esc键退出程序
        if cv2.waitKey(1) & 0xFF ==27:
            break
    
    # 停止录制,关闭设备
    cam.stream_off()
    cam.close_device()
    

    使用本地摄像头录制视频

    import cv2#导入opencv包
    import time
    
    video=cv2.VideoCapture(0)   # 打开摄像头,0代表摄像头编号
     
    fourcc = cv2.VideoWriter_fourcc(*'XVID')    # 视频存储的格式
    fps = video.get(cv2.CAP_PROP_FPS)   # 帧率
    # 视频的宽高
    size = (int(video.get(cv2.CAP_PROP_FRAME_WIDTH)), \
            int(video.get(cv2.CAP_PROP_FRAME_HEIGHT))) 
    # 文件名设置                 
    filename = '/home/liu/DaHengCamera/Video/video_'+ \
        time.strftime("%Y%m%d_%H%M%S", time.localtime())+'.avi'
    out = cv2.VideoWriter(filename, fourcc, fps, size)  # 视频存储
     
    while out.isOpened():
        ret,img=video.read()    # 开始使用摄像头读数据,返回ret为true,img为读的图像
        if ret is False:    # ret为false则关闭
            exit()
        cv2.namedWindow('video',cv2.WINDOW_AUTOSIZE)    # 创建一个名为video的窗口
        cv2.imshow('video',img) # 将捕捉到的图像在video窗口显示
        out.write(img)  # 将捕捉到的图像存储
        # 按esc键退出程序
        if cv2.waitKey(1) & 0xFF ==27:
            video.release() # 关闭摄像头
            break
    

    问题解答

    出现错误请参考文档《Python接口开发说明书.pdf》,在doc_cn文件夹下。

    展开全文
  • linux下使用opencv读取大恒相机

    千次阅读 2019-03-06 17:37:00
    大恒网口相机真的有点坑,api很难用,还好技术支持比较有耐心,一点一点的帮着解决了问题。 驱动安装 首先去大恒官网去下载linux下面的驱动,除了C++版本,还有python版本。一定要注意:linux下面安装驱动时,要看...
  • opencv打开大恒水晶相机教程

    千次阅读 2017-10-22 11:10:50
    opencv打开图像的方式和自带程序打开方式不同,因此需要调用相机的封装程序。依赖文件: 1.驱动----需要安装相机软件 2.头文件-----一般在Samples里面  3.lib库------也在Samples里面VC SDK/lib   步骤一: ...
  • Python调用大恒相机(Ubuntu16.04) 文章目录Python调用大恒相机(Ubuntu16.04)下载API文件环境配置验证 下载API文件 wget ...
  • opencv使用大恒相机的痛苦经历

    万次阅读 2017-04-14 17:14:11
    ),挑了个国产的相机大恒的DH-HV3151UC 从到货那天开始经历了整整一周的折磨(不过也了解了许多相机硬件相关的知识) 但是,不是我不支持国货,外国货插上就能用简直太棒了好不。。。 拿到相机和镜头当晚,就...
  • 首先,大恒相机自带的SDK(以下简称SDK)是一个很不错的资源,我用的是其中的C++的部分,其中的“Samples\C++ SDK\src\GxSingleCam”这个工程,如果要利用这些工程,是需要管理员权限的,这个如果不想每次都需要用...
  • 大恒水晶相机opencv打开程序,可以实现视频的实时查看
  • 大恒相机QT例程LINUX

    2019-01-30 13:16:50
    水星系列相机QT开发例程,LINUX系统QT例程,很有参考价值。
  • Qt5.5.1读取大恒相机

    2018-08-28 19:10:01
    ===环境:VS2013+Qt5.5.1+opencv+大恒相机 ===功能:采集+显示+保存 ===扩展:图像显示函数可以直接添加opencv图像处理
  • 配置好相关文件 可以在VS里直接运行 里面还用到了opencv的一些函数
  • MFC中实现与外部相机的联接,实时采集图像,元代码对实现步骤做了详细的说明!!
  • VS2015+OpenCV+大恒MER-Gx系列工业相机

    千次阅读 热门讨论 2019-01-06 16:10:27
    VS2015+OpenCV+大恒MER-Gx系列工业相机1.实验所需2.建立C++项目3. 添加源文件4.感言 本人C++和OpenCV基础比较薄弱,VS2015庞杂的处理界面又让人应接不暇。之前偶尔使用网络摄像头,勉强能够完成基础操作;偶尔进行...
  • 大恒相机开发(大恒SDK+opencv开发 一.项目简介 在大三上学期做过人脸识别的开发,刚好下学期老师手中有相机的项目,然后项目就到了我手上,下面是我开发这个项目的一些经历,进程还在调试中。笔记会按照我的进度...
  • MFC打开大恒相机

    2017-11-29 16:44:05
    VS2013打开大恒相机,有开始采集和停止采集,打开设备和关闭设备四个控制按钮,获取的相机图像源通过Opencv 显示到mfc的界面上,方便对接下来的获取的图片再进行下一步处理;注意事项:1. 请先安装大恒相机的驱动,...
  • 使用大恒sdk黑白相机结合opencv的图像采集 关键是实现大恒的数据到opencv里面的Mat矩阵的数据转换。 下面是关键代码 Mat curr(objImageDataPointer->GetHeight(), objImageDataPointer->GetWidth(), CV_8UC1);...
  • 使用Opencv大恒C++ SDK采集大恒水星相机图像

    千次阅读 热门讨论 2018-12-12 16:06:03
    在项目中,使用了大恒的水星相机,需要把图存成Opencv的Mat形式。大恒C++ SDK采集的图像数据不能直接把图像的数据存进Mat,需要将原始数据(我这里是BayerRG8)经过格式转换之后转变成RGB24的格式,直接调用SDK的...
  • 大恒相机录屏终于解决了(python+sdk+opencv) 一开始拿到大恒相机,就遇上了第一个坑:直接用opencv函数是打不开的,要用他自己sdk的gxipy。用了之后,给的示例只有采集图片的,录屏如下: ```python import gxipy...
  • #include "stdafx.h" #include "GxIAPI.h" #include "DxImageProc.h" #include <iostream> #include <opencv2/core/core.hpp> ...以上代码中涉及的opencv大恒lib、dll请自行添加至环境中。
  • Qt+大恒相机+OpenCV+MinGW界面开发

    千次阅读 热门讨论 2019-08-16 22:31:38
    Qt+大恒相机+OpenCV+MinGW界面开发踩坑实录遇到的坑有哪些?大恒相机接口的问题(C与C++选谁,傻傻分不清)OpenCV版本与MinGW编译平台适应性问题(编译通过,但是一运行就异常退出)关于打包总结 博主最近在用Qt从事...
  • C++ 大恒水星相机的单帧采集及回调采集 利用OpenCV转成 Mat格式 最近购买一大恒水星MER-310-12UC型彩色相机,其SDK在2019年进行了更新,与之前SDK有很大不同,故现在网上资料较少,将一些简单的采集转换操作过程进行...
  • 利用QT建立工程项目,用C++调用海康相机SDK来采集图像,并通过openCV将获取的图像数据转换为可以进行显示的图像。

空空如也

空空如也

1 2 3 4 5
收藏数 92
精华内容 36
关键字:

opencv调用大恒相机