vs配置opencv环境 opencv绘制海康相机

首先我们打开vs
创建一个控制台应用vs配置opencv环境 opencv绘制海康相机_第1张图片
vs配置opencv环境 opencv绘制海康相机_第2张图片
vs配置opencv环境 opencv绘制海康相机_第3张图片
vs配置opencv环境 opencv绘制海康相机_第4张图片
vs配置opencv环境 opencv绘制海康相机_第5张图片
vs配置opencv环境 opencv绘制海康相机_第6张图片
去上一层目录 然后选择×64 debug 讲海康相机以及opencv的dll文件复制进去
vs配置opencv环境 opencv绘制海康相机_第7张图片
分别在opencv的这个目录下vs配置opencv环境 opencv绘制海康相机_第8张图片
vs配置opencv环境 opencv绘制海康相机_第9张图片
以下是调用的代码

// HIK.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。
//

#include 
#include 

#include 
#include 
#include 
#include 

#include 

//#include 



using namespace std;
using namespace cv;
LONG nPort = -1;
HWND hPlayWnd = NULL;
FILE *Videofile = NULL;
FILE *Audiofile = NULL;
char filename[100];
int iPicNum = 0;//Set channel NO.


//
解码回调 视频为YUV数据(YV12),音频为PCM数据
void CALLBACK DecCBFun(long nPort, char * pBuf, long nSize, FRAME_INFO * pFrameInfo, long nReserved1, long nReserved2)
{
	long lFrameType = pFrameInfo->nType;
	if (lFrameType == T_AUDIO16)
	{
	//	TRACE("Audio nStamp:%d\n", pFrameInfo->nStamp);
		OutputDebugString("test_DecCb_Write Audio16 \n");
		if (Audiofile == NULL)
		{
			sprintf(filename, "AudionPCM.pcm", iPicNum);
			Audiofile = fopen(filename, "wb");
		}
		fwrite(pBuf, nSize, 1, Audiofile);
	}

	else if (lFrameType == T_YV12)
	{
		int w = pFrameInfo->nWidth;
		int h = pFrameInfo->nHeight;
		Mat yuv = Mat(h*1.5,w,CV_8UC1,pBuf);
		Mat rgb = Mat(h, w, CV_8UC3);;
		cvtColor(yuv, rgb, CV_YUV2RGB_I420);
		namedWindow("rgb", 0);
		imshow("rgb", rgb);
		waitKey(5);
		//TRACE("Video nStamp:%d\n", pFrameInfo->nStamp);
		/*OutputDebugString("test_DecCb_Write YUV \n");
		if (Videofile == NULL)
		{
			sprintf(filename, "VideoYV12.yuv", iPicNum);
			Videofile = fopen(filename, "wb");
		}
		fwrite(pBuf, nSize, 1, Videofile);*/
	}
	else
	{

	}
}

//void CALLBACK fRealDataCallBack(LONG lRealHandle, DWORD dwDataType, BYTE *pBuffer, DWORD dwBufSize, void *pUser)
//{
//	switch (dwDataType){
//		case NET_DVR_SYSHEAD:
//			cout << "1" << endl;
//			break;
//		case NET_DVR_STREAMDATA:
//			cout << dwDataType << endl;
//			break;
//		default:
//			break;
//	}
//}

void CALLBACK fRealDataCallBack(LONG lRealHandle, DWORD dwDataType, BYTE *pBuffer, DWORD dwBufSize, void *pUser)
{
	DWORD dRet = 0;
	BOOL inData = FALSE;

	switch (dwDataType)
	{
	case NET_DVR_SYSHEAD:
		if (!PlayM4_GetPort(&nPort))
		{
			break;
		}
		if (!PlayM4_OpenStream(nPort, pBuffer, dwBufSize, 1024 * 1024))
		{
			dRet = PlayM4_GetLastError(nPort);
			break;
		}

		//设置解码回调函数 只解码不显示
// 		if (!PlayM4_SetDecCallBack(nPort,DecCBFun))
// 		{
// 			dRet=PlayM4_GetLastError(nPort);
// 			break;
// 		}

		//设置解码回调函数 解码且显示
		if (!PlayM4_SetDecCallBackEx(nPort, DecCBFun, NULL, NULL))
		{
			dRet = PlayM4_GetLastError(nPort);
			break;
		}

		//打开视频解码
		if (!PlayM4_Play(nPort, hPlayWnd))
		{
			dRet = PlayM4_GetLastError(nPort);
			break;
		}

		//打开音频解码, 需要码流是复合流
		if (!PlayM4_PlaySound(nPort))
		{
			dRet = PlayM4_GetLastError(nPort);
			break;
		}
		break;

	case NET_DVR_STREAMDATA:
		inData = PlayM4_InputData(nPort, pBuffer, dwBufSize);
		//cout << dwDataType << endl;
		while (!inData)
		{			
			Sleep(10);
			inData = PlayM4_InputData(nPort, pBuffer, dwBufSize);
			OutputDebugString("PlayM4_InputData failed \n");
		}
		break;
	default:
		inData = PlayM4_InputData(nPort, pBuffer, dwBufSize);
		while (!inData)
		{
			Sleep(10);
			inData = PlayM4_InputData(nPort, pBuffer, dwBufSize);
			OutputDebugString("PlayM4_InputData failed \n");
		}
		break;
	}
}
int main()
{
	LPNET_DVR_DEVICEINFO_V30 lpDeviceInfo = NULL;
	char ip[16], userName[64], passWord[64];

	NET_DVR_Init(); //HK SDK初始化
	NET_DVR_SetConnectTime();	

	strcpy_s(ip, 16, "192.168.1.112");
	strcpy_s(userName, 64, "admin");
	strcpy_s(passWord, 64, "jk123456");
	LONG userId = NET_DVR_Login_V30(ip,8000,userName,passWord,lpDeviceInfo);
	if (userId < 0) {
		cout << "Login Failed" << endl;
	}
	else
	{
		cout << "Login success, userId:" << userId << endl;
	}

	NET_DVR_CLIENTINFO ClientInfo;
	ClientInfo.lChannel = 1; //Channel number 设备通道号
	ClientInfo.hPlayWnd = NULL;  //窗口为空,设备SDK不解码只取流
	ClientInfo.lLinkMode = 0;    //Main Stream
	ClientInfo.sMultiCastIP = NULL;

	LONG llRealHandle = NET_DVR_RealPlay_V30(userId, &ClientInfo, fRealDataCallBack,NULL,TRUE);
	getchar();

	if (llRealHandle < 0)
	{
		cout << "Failed to Start RealPlay" << endl;
		return 0;
	}
	else {
		cout << "Start RealPlay,playHnd =" <“开始执行(不调试)”菜单
// 调试程序: F5 或调试 >“开始调试”菜单

// 入门使用技巧: 
//   1. 使用解决方案资源管理器窗口添加/管理文件
//   2. 使用团队资源管理器窗口连接到源代码管理
//   3. 使用输出窗口查看生成输出和其他消息
//   4. 使用错误列表窗口查看错误
//   5. 转到“项目”>“添加新项”以创建新的代码文件,或转到“项目”>“添加现有项”以将现有代码文件添加到项目
//   6. 将来,若要再次打开此项目,请转到“文件”>“打开”>“项目”并选择 .sln 文件

你可能感兴趣的:(计算机,opencv)