opencv+海康威视网络摄像头实时预览+抓图(环境配置加程序)
材料:opencv2.4.7,vs2010,??低暰W絡攝像頭,??礢DK(win64)
一. OpenCV2.4.7+vs2010配置
1、設置環境變量:
我的電腦--->右鍵--->屬性--->高級--->環境變量--->在用戶變量里,新建path和OPENCV兩個項
(根據自己的OpenCV下載路徑進行配置,我下載在了E:\OpenCV2中)
步驟1:在path中添加 E:\OpenCV2\opencv\build\x86\vc10\bin,和? E:\OpenCV2\opencv\build\x64\vc11? 就是添加dll文件
步驟2:添加OPENCV的環境變量E:\OpenCV2\opencv\build
2、打開一個Opencv的工程,點菜單目錄的“視圖”--->屬性管理器--->雙擊項目名稱
步驟3:在配置屬性--->VC++目錄--->包含目錄文件中添加
E:\OpenCV2\opencv\build\include
E:\OpenCV2\opencv\build\include\opencv
E:\OpenCV2\opencv\build\include\opencv2
E:\OpenCV2\opencv\build\include\opencv2\highgui
E:\OpenCV2\opencv\build\include\opencv2\imgproc
E:\OpenCV2\opencv\build\include\opencv2\core
步驟4::在配置屬性--->VC++目錄--->庫目錄中添加
E:\OpenCV2\opencv\build\x86\vc11\lib
步驟5 添加lib庫文件, 在配置debug里--->項目屬性--->鏈接器--->輸入--->附加依賴庫 里加上
opencv_calib3d247d.lib
opencv_contrib247d.lib
opencv_core247d.lib
opencv_features2d247d.lib
opencv_flann247d.lib
opencv_gpu247d.lib
opencv_highgui247d.lib
opencv_imgproc247d.lib
opencv_legacy247d.lib
opencv_ml247d.lib
opencv_nonfree247d.lib
opencv_objdetect247d.lib
opencv_photo247d.lib
opencv_stitching247d.lib
opencv_ts247d.lib
opencv_video247d.lib
opencv_videostab247d.lib
步驟6:在配置release里--->項目屬性--->鏈接器--->輸入--->附加依賴庫 里加上
opencv_calib3d247.lib
opencv_contrib247.lib
opencv_core247.lib
opencv_features2d247.lib
opencv_flann247.lib
opencv_gpu247.lib
opencv_highgui247.lib
opencv_imgproc247.lib
opencv_legacy247.lib
opencv_ml247.lib
opencv_nonfree247.lib
opencv_objdetect247.lib
opencv_photo247.lib
opencv_stitching247.lib
opencv_ts247.lib
opencv_video247.lib
opencv_videostab247.lib
opencv測試實例:
//開始簡單的實例: #include <core/core.hpp> //注意路徑 #include <highgui/highgui.hpp> #include <iostream> using namespace cv; using namespace std;int main( int argc, char** argv ) {Mat image;image = imread("H:\\Image\\lena.jpg"); // Read the file,argv[1];注意是雙斜杠!if(! image.data ) // Check for invalid input{cout << "Could not open or find the image" << std::endl ;return -1;}namedWindow( "Display window", CV_WINDOW_AUTOSIZE );// Create a window for display.imshow( "Display window", image ); // Show our image inside it.waitKey(0); // Wait for a keystroke in the windowreturn 0;}二. SDK+vs2010環境配置(預覽)
首先,將網絡攝像頭接上電源,并通過網線接入電腦。在官網下載SADP,安裝好后名字叫設備網絡搜索,打開設備網路搜索點擊刷新,觀察設備是否在線(要保證你的設備ip與電腦ip在同一網段,即前三位相同,若已根據網上教程設置好設備的ip,賬戶名和密碼,則要改正電腦ip與設備ip處于同一網段,相關教程自行百度)。
(win10)更改電腦ip步驟:網絡和Internet設置->更改適配器選項->雙擊除了WiFi的另一個 (我的這里面叫以太網)->屬性->雙擊Internet協議版本4(TCP/IPv4)->點擊使用下面的IP地址(s),即可更改ip(注意:ip前三位和默認網關前三位于攝像機ip前三位相同,子網掩碼設置為默認值
?
然后雙擊app中設備的ip名,進入網站(一般使用IE)進行登陸,注意此時要斷開電腦的wifi。輸入賬戶和密碼登陸后,即可觀察實時預覽情況。
在VS2010中進行??低暰W絡攝像頭二次開發:
1.vs2010中新建工程
2.配置屬性頁 ? ? ?? 注:平臺改為(x64)(因為我的SDK是win64版本,并下載于 E:\HIKSDKx64 文件夾中)
(1)VC++目錄->包含目錄->添加OpenCV的相關文件(見一),添加海康SDK中頭文件路徑(win64)
E:\HIKSDKx64\CH-HCNetSDKV6.0.2.35_build20190411_Win64\頭文件
(2)VC++目錄->庫目錄->添加OpenCV的相關文件(見一),添加海康SDK中庫文件路徑(win64)
E:\HIKSDKx64\CH-HCNetSDKV6.0.2.35_build20190411_Win64\庫文件?
(3)鏈接器->輸入->附加依賴項->添加OpenCV的相關依賴項,添加海康SDK中附加依賴項
HCNetSDK.lib
GdiPlus.lib
HCAlarm.lib
HCCore.lib
HCGeneralCfgMgr.lib
HCPreview.lib
PlayCtrl.lib
(4)運行程序會出現缺少相關dll文件情況,在文件夾x64的debug文件夾中添加以下文件(這個debug中原本含有.exe文件)
HCNetSDKCom文件夾(不能更改名字)
AudioRender.dll
GdiPlus.dll
HCCore.dll
HCNetSDK.dll
PlayCtrl.dll
SuperRender.dll
注:程序中加入#include "plaympeg4.h"? 預覽前加入語句 ?? PlayM4_GetLastError(0); ? ? ?? 要不然會出現64號問題
預覽+抓圖程序如下
// hkproject02.cpp : 定義控制臺應用程序的入口點。 //#include "stdafx.h" #include <stdio.h> #include <iostream> #include "Windows.h" #include "HCNetSDK.h" #include "plaympeg4.h" #include <time.h> #include <string> using namespace std;//typedef HWND(WINAPI *PROCGETCONSOLEWINDOW)(); //PROCGETCONSOLEWINDOW GetConsoleWindow;void CALLBACK g_ExceptionCallBack(DWORD dwType, LONG lUserID, LONG lHandle, void *pUser) {char tempbuf[256] = { 0 };switch (dwType){case EXCEPTION_RECONNECT: //預覽時重連printf("----------reconnect--------%d\n", time(NULL));break;default:break;} } HWND GetConsoleHwnd(void) { #define MY_BUFSIZE 1024 // Buffer size for console window titles.HWND hwndFound; // This is what is returned to the caller.char pszNewWindowTitle[MY_BUFSIZE]; // Contains fabricated// WindowTitle.char pszOldWindowTitle[MY_BUFSIZE]; // Contains original// WindowTitle.// Fetch current window title.GetConsoleTitle((LPWSTR)pszOldWindowTitle, MY_BUFSIZE);// Format a "unique" NewWindowTitle.wsprintf((LPWSTR)pszNewWindowTitle, (LPCWSTR)"%d/%d",GetTickCount(),GetCurrentProcessId());// Change current window title.SetConsoleTitle((LPCWSTR)pszNewWindowTitle);// Ensure window title has been updated.Sleep(40);// Look for NewWindowTitle.hwndFound = FindWindow(NULL, (LPCWSTR)pszNewWindowTitle);// Restore original window title.SetConsoleTitle((LPCWSTR)pszOldWindowTitle);return(hwndFound); }void main() {//---------------------------------------//初始化NET_DVR_Init();//設置連接時間與重連時間NET_DVR_SetConnectTime(2000, 1);NET_DVR_SetReconnect(10000, true);//---------------------------------------// 獲取控制臺窗口句柄//HMODULE hKernel32 = GetModuleHandle("kernel32");//GetConsoleWindow = (PROCGETCONSOLEWINDOW)GetProcAddress(hKernel32, "GetConsoleWindow");//---------------------------------------// 注冊設備LONG lUserID;NET_DVR_DEVICEINFO_V30 struDeviceInfo;lUserID = NET_DVR_Login_V30("192.168.0.65", 8000, "admin", "aaaa123456", &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);PlayM4_GetLastError(0);//---------------------------------------//啟動預覽并設置回調數據流LONG lRealPlayHandle;HWND hWnd = GetConsoleWindow(); //獲取窗口句柄NET_DVR_PREVIEWINFO struPlayInfo = { 0 };struPlayInfo.hPlayWnd = hWnd; //需要SDK 解碼時句柄設為有效值,僅取流不解碼時可設為空struPlayInfo.lChannel = 1; //預覽通道號struPlayInfo.dwStreamType = 0; //0-主碼流,1-子碼流,2-碼流3,3-碼流4,以此類推struPlayInfo.dwLinkMode = 0; //0- TCP 方式,1- UDP 方式,2- 多播方式,3- RTP 方式,4-RTP/RTSP,5-RSTP/HTTPstruPlayInfo.bBlocked = 1; //0- 非阻塞取流,1- 阻塞取流lRealPlayHandle = NET_DVR_RealPlay_V40(lUserID, &struPlayInfo, NULL, NULL);//判斷出的什么錯誤DWORD s;s = NET_DVR_GetLastError();if (lRealPlayHandle < 0){printf("NET_DVR_RealPlay_V40 error\n");NET_DVR_Logout(lUserID);NET_DVR_Cleanup();return;}int o = -1;for (int i = 0; i < 10; i++){string a = "E:\\c++\\HKsdk\\hkproject02\\out\\";char c = '1' + i;a.push_back(c);a = a + ".bmp";//抓圖o = NET_DVR_CapturePicture(lRealPlayHandle, const_cast<char*>(a.c_str()));Sleep(1000);}Sleep(10000);//關閉預覽NET_DVR_StopRealPlay(lRealPlayHandle);//注銷用戶NET_DVR_Logout(lUserID);//釋放SDK 資源NET_DVR_Cleanup();return; }?
?
?
?
?
總結
以上是生活随笔為你收集整理的opencv+海康威视网络摄像头实时预览+抓图(环境配置加程序)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: MATLAB绘图函数ezplot入门详解
- 下一篇: hdf安装