海康相机的二次开发

监控领域的相机,应该首选海康的了。大华貌似也不错,跟海康是竞争对手。

如果我们仅仅买了一个前端(相机),没有买后台(录像机),并且需要把监控视频实时显示在我们自己的上位机软件上,基于海康sdk的二次开发就非常必要了。

海康的sdk开发包,可到海康的官网下载。也要提前配置好opencv。

想要读取到海康相机的图像,有两种方法,一种是直接使用opencv和rtsp协议,一种是调用海康sdk的函数。

1、rtsp协议

CvCapture* pcapture;
pcapture = cvCreateFileCapture("rtsp://admin:12345@192.1.2.111/mpeg4/ch1/sub/av_stream");
if (!pcapture)
  {
    printf("未能读取视频流\n");
    return false;
  }
IplImage* frme;
while (true)
  {
	frme = cvQueryFrame(pcapture);
	cv::Mat image = cv::cvarrToMat(frme);
	imshow("test", image);
	waitKey(10);
  }
cvReleaseImage(&frme);
return 0;

此种方法,博主尝试过,虽然海康相机是支持rtsp协议的,但是用起来,会出现花屏的现象。如果有读者遇到同样的问题,欢迎交流并寻找解决办法。


2、调用海康sdk

void main()
{
	//---------------------------------------
	// 初始化
	NET_DVR_Init();
	//设置连接时间与重连时间
	NET_DVR_SetConnectTime(2000, 1);
	NET_DVR_SetReconnect(10000, true);


	//---------------------------------------
	// 注册设备
	LONG lUserID;
	NET_DVR_DEVICEINFO_V30 struDeviceInfo;
	lUserID = NET_DVR_Login_V30("10.1.2.111", 8000, "admin", "shijue666", &struDeviceInfo);
	if (lUserID < 0)
	{
		printf("Login error, %d\n", NET_DVR_GetLastError());
		NET_DVR_Cleanup();
		return;
	}

	//---------------------------------------
	//设置异常消息回调函数
	NET_DVR_SetExceptionCallBack_V30(0, NULL, g_ExceptionCallBack, NULL);

	//---------------------------------------
	//启动预览并设置回调数据流
	LONG lRealPlayHandle;
	cvNamedWindow("Mywindow", 0);
	cvNamedWindow("IPCamera", 0);

	HWND  h = (HWND)cvGetWindowHandle("Mywindow");
	if (h == 0)
	{
		cout << "窗口创建失败" << endl;
	}

	NET_DVR_PREVIEWINFO struPlayInfo = { 0 };
	struPlayInfo.hPlayWnd = h;         //需要SDK解码时句柄设为有效值,仅取流不解码时可设为空
	struPlayInfo.lChannel = 1;           //预览通道号
	struPlayInfo.dwStreamType = 1;       //0-主码流,1-子码流,2-码流3,3-码流4,以此类推
	struPlayInfo.dwLinkMode = 0;         //0- TCP方式,1- UDP方式,2- 多播方式,3- RTP方式,4-RTP/RTSP,5-RSTP/HTTP

	//获取分辨率参数

	int Ret;
	NET_DVR_COMPRESSIONCFG_V30  struParams = { 0 };
	DWORD dwReturnLen;
	Ret = NET_DVR_GetDVRConfig(lUserID, NET_DVR_GET_COMPRESSCFG_V30, struPlayInfo.lChannel, &struParams, sizeof(NET_DVR_COMPRESSIONCFG_V30), &dwReturnLen);
	if (!Ret)
	{
		cout << "获取分辨率失败" << endl;
	}
	else
	{
		cout << "获取分辨率和帧率参数成功!" << endl;
	    cout << "帧率" << struParams.struNormHighRecordPara.dwVideoBitrate << endl;
		cout<< "分辨率" << struParams.struNormHighRecordPara.byResolution << endl;
		//再修改分辨率
		struParams.struNormHighRecordPara.byStreamType = 0;
		struParams.struNormHighRecordPara.dwVideoBitrate = 25;
		struParams.struNormHighRecordPara.byResolution = 19;   //16可以到子码流的最大分辨率
		int SetCamera;
		SetCamera = NET_DVR_SetDVRConfig(lUserID, NET_DVR_SET_COMPRESSCFG_V30, struPlayInfo.lChannel,
			&struParams, sizeof(NET_DVR_COMPRESSIONCFG_V30));
		if (SetCamera)
		{
			cout << "修改分辨率成功" << endl;
			cout << "帧率" << struParams.struNormHighRecordPara.dwVideoBitrate << endl;
		}
	}

	//回流函数,和软解码,,获取图像
	lRealPlayHandle = NET_DVR_RealPlay_V40(lUserID, &struPlayInfo, fRealDataCallBack, NULL);


	if (lRealPlayHandle < 0)
	{
		printf("NET_DVR_RealPlay_V40 error\n");
		printf("%d\n", NET_DVR_GetLastError());
		NET_DVR_Logout(lUserID);
		NET_DVR_Cleanup();
		return;
	}
	waitKey();
	Sleep(-1);
	//---------------------------------------
	//关闭预览
	NET_DVR_StopRealPlay(lRealPlayHandle);
	//注销用户
	NET_DVR_Logout(lUserID);
	//释放SDK资源
	NET_DVR_Cleanup();
	return;
}
总结下需要实现的基本功能:

1、上位机软件窗口显示视频流

2、修改分辨率,上面代码中已有,注意主码流和子码流的区别

3、抓取一张图片

4、保存一段视频

本文完整调用海康sdk实现视频预览,修改分辨率等功能,下载后直接可以运行


海康相机是一种高性能的摄像机设备,它具有强大的功能和灵活的二次开发能力。二次开发是指在原有的海康相机功能基础上,进行进一步的个性化定制和应用开发。 首先,海康相机提供了丰富的SDK(软件开发工具包),可以方便开发者进行二次开发SDK提供了相机的各种功能接口和开发文档,开发者可以利用这些接口进行视频流的采集、图像处理、存储和传输等操作,实现各种自定义的功能需求。 其次,海康相机支持多种编程语言,包括C、C++、C#等,开发者可以根据自身的编程语言偏好选择合适的开发方式。同时,海康相机还提供了相应的示例代码和案例,帮助开发者快速上手和实现自己的应用。 再次,海康相机二次开发可以广泛应用于安防监控、智能交通、工业检测等领域。开发者可以利用海康相机的高清图像采集和处理能力,结合自己的算法和业务需求,开发出各种智能化的应用,如人脸识别、车牌识别、物体检测等。这些应用可以提高工作效率,增强安全性,并在各个领域发挥重要作用。 总的来说,海康相机二次开发能力强大,提供了灵活的开发方式和丰富的功能接口,可以满足开发者的个性化需求,并广泛应用于各个领域。通过二次开发,我们可以充分发挥海康相机的潜力,实现更多的创新和价值。
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值