日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

opencv+海康威视网络摄像头实时预览+抓图(环境配置加程序)

發(fā)布時(shí)間:2023/12/14 编程问答 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 opencv+海康威视网络摄像头实时预览+抓图(环境配置加程序) 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

材料:opencv2.4.7,vs2010,??低暰W(wǎng)絡(luò)攝像頭,??礢DK(win64)

一. OpenCV2.4.7+vs2010配置

1、設(shè)置環(huán)境變量:

我的電腦--->右鍵--->屬性--->高級(jí)--->環(huán)境變量--->在用戶變量里,新建path和OPENCV兩個(gè)項(xiàng)

(根據(jù)自己的OpenCV下載路徑進(jìn)行配置,我下載在了E:\OpenCV2中)

步驟1:在path中添加 E:\OpenCV2\opencv\build\x86\vc10\bin,和? E:\OpenCV2\opencv\build\x64\vc11? 就是添加dll文件
步驟2:添加OPENCV的環(huán)境變量E:\OpenCV2\opencv\build

2、打開一個(gè)Opencv的工程,點(diǎn)菜單目錄的“視圖”--->屬性管理器--->雙擊項(xiàng)目名稱
步驟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里--->項(xiàng)目屬性--->鏈接器--->輸入--->附加依賴庫 里加上

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里--->項(xiàng)目屬性--->鏈接器--->輸入--->附加依賴庫 里加上

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測試實(shí)例:

//開始簡單的實(shí)例: #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環(huán)境配置(預(yù)覽)

首先,將網(wǎng)絡(luò)攝像頭接上電源,并通過網(wǎng)線接入電腦。在官網(wǎng)下載SADP,安裝好后名字叫設(shè)備網(wǎng)絡(luò)搜索,打開設(shè)備網(wǎng)路搜索點(diǎn)擊刷新,觀察設(shè)備是否在線(要保證你的設(shè)備ip與電腦ip在同一網(wǎng)段,即前三位相同,若已根據(jù)網(wǎng)上教程設(shè)置好設(shè)備的ip,賬戶名和密碼,則要改正電腦ip與設(shè)備ip處于同一網(wǎng)段,相關(guān)教程自行百度)。

(win10)更改電腦ip步驟:網(wǎng)絡(luò)和Internet設(shè)置->更改適配器選項(xiàng)->雙擊除了WiFi的另一個(gè) (我的這里面叫以太網(wǎng))->屬性->雙擊Internet協(xié)議版本4(TCP/IPv4)->點(diǎn)擊使用下面的IP地址(s),即可更改ip(注意:ip前三位和默認(rèn)網(wǎng)關(guān)前三位于攝像機(jī)ip前三位相同,子網(wǎng)掩碼設(shè)置為默認(rèn)值

?

然后雙擊app中設(shè)備的ip名,進(jìn)入網(wǎng)站(一般使用IE)進(jìn)行登陸,注意此時(shí)要斷開電腦的wifi。輸入賬戶和密碼登陸后,即可觀察實(shí)時(shí)預(yù)覽情況。

在VS2010中進(jìn)行??低暰W(wǎng)絡(luò)攝像頭二次開發(fā):

1.vs2010中新建工程

2.配置屬性頁 ? ? ?? 注:平臺(tái)改為(x64)(因?yàn)槲业腟DK是win64版本,并下載于 E:\HIKSDKx64 文件夾中)

(1)VC++目錄->包含目錄->添加OpenCV的相關(guān)文件(見一),添加??礢DK中頭文件路徑(win64)

E:\HIKSDKx64\CH-HCNetSDKV6.0.2.35_build20190411_Win64\頭文件

(2)VC++目錄->庫目錄->添加OpenCV的相關(guān)文件(見一),添加??礢DK中庫文件路徑(win64)

E:\HIKSDKx64\CH-HCNetSDKV6.0.2.35_build20190411_Win64\庫文件?

(3)鏈接器->輸入->附加依賴項(xiàng)->添加OpenCV的相關(guān)依賴項(xiàng),添加海康SDK中附加依賴項(xiàng)

HCNetSDK.lib
GdiPlus.lib
HCAlarm.lib
HCCore.lib
HCGeneralCfgMgr.lib
HCPreview.lib
PlayCtrl.lib

(4)運(yùn)行程序會(huì)出現(xiàn)缺少相關(guān)dll文件情況,在文件夾x64的debug文件夾中添加以下文件(這個(gè)debug中原本含有.exe文件)

HCNetSDKCom文件夾(不能更改名字)
AudioRender.dll
GdiPlus.dll
HCCore.dll
HCNetSDK.dll
PlayCtrl.dll
SuperRender.dll

:程序中加入#include "plaympeg4.h"? 預(yù)覽前加入語句 ?? PlayM4_GetLastError(0); ? ? ?? 要不然會(huì)出現(xiàn)64號(hào)問題

預(yù)覽+抓圖程序如下

// hkproject02.cpp : 定義控制臺(tái)應(yīng)用程序的入口點(diǎn)。 //#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: //預(yù)覽時(shí)重連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();//設(shè)置連接時(shí)間與重連時(shí)間NET_DVR_SetConnectTime(2000, 1);NET_DVR_SetReconnect(10000, true);//---------------------------------------// 獲取控制臺(tái)窗口句柄//HMODULE hKernel32 = GetModuleHandle("kernel32");//GetConsoleWindow = (PROCGETCONSOLEWINDOW)GetProcAddress(hKernel32, "GetConsoleWindow");//---------------------------------------// 注冊(cè)設(shè)備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;}//---------------------------------------//注冊(cè)消息異?;卣{(diào)函數(shù)NET_DVR_SetExceptionCallBack_V30(0, NULL, g_ExceptionCallBack, NULL);PlayM4_GetLastError(0);//---------------------------------------//啟動(dòng)預(yù)覽并設(shè)置回調(diào)數(shù)據(jù)流LONG lRealPlayHandle;HWND hWnd = GetConsoleWindow(); //獲取窗口句柄NET_DVR_PREVIEWINFO struPlayInfo = { 0 };struPlayInfo.hPlayWnd = hWnd; //需要SDK 解碼時(shí)句柄設(shè)為有效值,僅取流不解碼時(shí)可設(shè)為空struPlayInfo.lChannel = 1; //預(yù)覽通道號(hào)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);//判斷出的什么錯(cuò)誤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);//關(guān)閉預(yù)覽NET_DVR_StopRealPlay(lRealPlayHandle);//注銷用戶NET_DVR_Logout(lUserID);//釋放SDK 資源NET_DVR_Cleanup();return; }

?

?

?

?

?

總結(jié)

以上是生活随笔為你收集整理的opencv+海康威视网络摄像头实时预览+抓图(环境配置加程序)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。