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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > Ubuntu >内容正文

Ubuntu

ubuntu 通过 海康sdk调用摄像头抓图片

發(fā)布時間:2023/12/4 Ubuntu 59 豆豆
生活随笔 收集整理的這篇文章主要介紹了 ubuntu 通过 海康sdk调用摄像头抓图片 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

https://blog.csdn.net/ding977921830/article/details/75272384

在本文中我的電腦是使用的Ubuntu16.04 64位,使用工具是QT5.7.1,opencv2.4.9.
一、根據(jù)電腦的型號下載海康威視的SDK包
網(wǎng)址:http://www.hikvision.com/cn/download_61.html。
我的筆記本時linux64位的,所以下載的 ————設(shè)備網(wǎng)絡(luò)SDK_Linux64?
二、 用下面的方法之一配置SDK
如果HCNetSDKCom目錄以及l(fā)ibhcnetsdk.so、libhpr.so、libHCCore文件和可執(zhí)行文件在同一級目錄下,則使用同級目錄下的庫文件;?
如果不在同一級目錄下,則需要將以上文件的目錄加載到動態(tài)庫搜索路徑中,設(shè)置的方式有以下幾種:?
1.?? ?將網(wǎng)絡(luò)SDK各動態(tài)庫路徑加入到LD_LIBRARY_PATH環(huán)境變量?
?? ?1.在終端輸入:export? LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/XXX:/XXX/HCNetSDKCom????? 只在當前終端起作用
?? ?2. 修改~/.bashrc或~/.bash_profile,最后一行添加 export? LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/XXX:/XXX/HCNetSDKCom,保存之后,使用source? .bashrc執(zhí)行該文件 ,當前用戶生效
?? ?3. 修改/etc/profile,添加內(nèi)容如第2條,同樣保存之后使用source執(zhí)行該文件? 所有用戶生效?
?

2.在/etc/ld.so.conf文件結(jié)尾添加網(wǎng)絡(luò)sdk庫的路徑,如/XXX和/XXX/HCNetSDKCom/,保存之后,然后執(zhí)行l(wèi)dconfig。

三. 在Ubuntu16.04 的qt中新建一個工程
1.? 在工程的 ×.pro文件中添加以下內(nèi)容:

[plain]?view plaincopy
  • INCLUDEPATH?+=?/usr/local/include?\??
  • /usr/local/include/opencv?\??
  • /usr/local/include/opencv2??
  • ??
  • LIBS?+=?/usr/local/lib/libopencv_calib3d.so\??
  • ????????/usr/local/lib/libopencv_ml.so.2.4.9\??
  • ????????/usr/local/lib/libopencv_calib3d.so.2.4?\??
  • ????????/usr/local/lib/libopencv_nonfree.so\??
  • ????????/usr/local/lib/libopencv_calib3d.so.2.4.9??\??
  • ????????/usr/local/lib/libopencv_nonfree.so.2.4\??
  • ????????/usr/local/lib/libopencv_contrib.so????\??
  • ????????/usr/local/lib/libopencv_nonfree.so.2.4.9\??
  • ????????/usr/local/lib/libopencv_contrib.so.2.4????\??
  • ????????/usr/local/lib/libopencv_objdetect.so\??
  • ????????/usr/local/lib/libopencv_contrib.so.2.4.9?\??
  • ????????/usr/local/lib/libopencv_objdetect.so.2.4\??
  • ????????/usr/local/lib/libopencv_core.so\??
  • ????????/usr/local/lib/libopencv_objdetect.so.2.4.9\??
  • ????????/usr/local/lib/libopencv_core.so.2.4?\??
  • ????????/usr/local/lib/libopencv_ocl.so\??
  • ????????/usr/local/lib/libopencv_core.so.2.4.9?\??
  • ????????/usr/local/lib/libopencv_ocl.so.2.4\??
  • ????????/usr/local/lib/libopencv_features2d.so?\??
  • ????????/usr/local/lib/libopencv_ocl.so.2.4.9\??
  • ????????/usr/local/lib/libopencv_features2d.so.2.4??\??
  • ????????/usr/local/lib/libopencv_photo.so\??
  • ????????/usr/local/lib/libopencv_features2d.so.2.4.9?\??
  • ????????/usr/local/lib/libopencv_photo.so.2.4\??
  • ????????/usr/local/lib/libopencv_flann.so??\??
  • ????????/usr/local/lib/libopencv_photo.so.2.4.9\??
  • ????????/usr/local/lib/libopencv_flann.so.2.4???\??
  • ????????/usr/local/lib/libopencv_stitching.so\??
  • ????????/usr/local/lib/libopencv_flann.so.2.4.9??\??
  • ????????/usr/local/lib/libopencv_stitching.so.2.4\??
  • ????????/usr/local/lib/libopencv_gpu.so?????\??
  • ????????/usr/local/lib/libopencv_stitching.so.2.4.9\??
  • ????????/usr/local/lib/libopencv_gpu.so.2.4???\??
  • ????????/usr/local/lib/libopencv_superres.so\??
  • ????????/usr/local/lib/libopencv_gpu.so.2.4.9?\??
  • ????????/usr/local/lib/libopencv_superres.so.2.4\??
  • ????????/usr/local/lib/libopencv_highgui.so???\??
  • ????????/usr/local/lib/libopencv_superres.so.2.4.9\??
  • ????????/usr/local/lib/libopencv_highgui.so.2.4???\??
  • ????????/usr/local/lib/libopencv_highgui.so.2.4.9?\??
  • ????????/usr/local/lib/libopencv_video.so\??
  • ????????/usr/local/lib/libopencv_imgproc.so??\??
  • ????????/usr/local/lib/libopencv_video.so.2.4\??
  • ????????/usr/local/lib/libopencv_imgproc.so.2.4?\??
  • ????????/usr/local/lib/libopencv_video.so.2.4.9\??
  • ????????/usr/local/lib/libopencv_imgproc.so.2.4.9\??
  • ????????/usr/local/lib/libopencv_videostab.so\??
  • ????????/usr/local/lib/libopencv_legacy.so?\??
  • ????????/usr/local/lib/libopencv_videostab.so.2.4\??
  • ????????/usr/local/lib/libopencv_legacy.so.2.4??\??
  • ????????/usr/local/lib/libopencv_videostab.so.2.4.9\??
  • ????????/usr/local/lib/libopencv_legacy.so.2.4.9??\??
  • ????????/usr/local/lib/libopencv_ml.so??
  • ??
  • INCLUDEPATH?+=?/home/ding/opencv_projects/CH_HCNetSDK_V5.2.7.4_build20170606_Linux64/incCn??
  • ??
  • ??
  • LIBS?+=?/home/ding/opencv_projects/CH_HCNetSDK_V5.2.7.4_build20170606_Linux64/lib/libhcnetsdk.so\??
  • ????????/home/ding/opencv_projects/CH_HCNetSDK_V5.2.7.4_build20170606_Linux64/lib/libHCCore.so\??
  • ????????/home/ding/opencv_projects/CH_HCNetSDK_V5.2.7.4_build20170606_Linux64/lib/libhpr.so\??
  • ????????/home/ding/opencv_projects/CH_HCNetSDK_V5.2.7.4_build20170606_Linux64/lib/libPlayCtrl.so\??
  • ????????/home/ding/opencv_projects/CH_HCNetSDK_V5.2.7.4_build20170606_Linux64/lib/libSuperRender.so\??
  • ????????/home/ding/opencv_projects/CH_HCNetSDK_V5.2.7.4_build20170606_Linux64/lib/libAudioRender.so??
  • 2. 在main.cpp函數(shù)中添加以下內(nèi)容:

    [cpp]?view plaincopy
  • #include?"opencv2/opencv.hpp"??
  • ??
  • #include?<QDir>??
  • #include?<fstream>??
  • #include?<unistd.h>??
  • //#include?"auto_entercs.h"??
  • ??
  • #include?"HCNetSDK.h"??
  • #include?"PlayM4.h"??
  • #include?"LinuxPlayM4.h"??
  • ??
  • #define?HPR_ERROR???????-1??
  • #define?HPR_OK???????????????0??
  • #define?USECOLOR??????????0??
  • ??
  • static?cv::Mat?dst;??
  • HWND?h?=?NULL;??
  • LONG?nPort=-1;??
  • LONG?lUserID;??
  • ??
  • pthread_mutex_t?mutex;??
  • std::list<cv::Mat>?g_frameList;??
  • ??
  • ??
  • FILE?*g_pFile?=?NULL;??
  • ??
  • void?CALLBACK?PsDataCallBack(LONG?lRealHandle,?DWORD?dwDataType,BYTE?*pPacketBuffer,DWORD?nPacketSize,?void*?pUser)??
  • {??
  • ??
  • ???if?(dwDataType??==?NET_DVR_SYSHEAD)??
  • ???{??
  • ???????//寫入頭數(shù)據(jù)??
  • ???????g_pFile?=?fopen("/home/lds/source/ps.dat",?"wb");??
  • ??
  • ???????if?(g_pFile?==?NULL)??
  • ???????{??
  • ???????????printf("CreateFileHead?fail\n");??
  • ???????????return;??
  • ???????}??
  • ??
  • ???????//寫入頭數(shù)據(jù)??
  • ???????fwrite(pPacketBuffer,?sizeof(unsigned?char),?nPacketSize,?g_pFile);??
  • ???????printf("write?head?len=%d\n",?nPacketSize);??
  • ???}??
  • ???else??
  • ???{??
  • ???????if(g_pFile?!=?NULL)??
  • ???????{??
  • ???????????fwrite(pPacketBuffer,?sizeof(unsigned?char),?nPacketSize,?g_pFile);??
  • ???????????printf("write?data?len=%d\n",?nPacketSize);??
  • ???????}??
  • ???}??
  • ??
  • }??
  • ??
  • //void?CALLBACK?DecCBFun(LONG?nPort,?char?*pBuf,?LONG?nSize,?FRAME_INFO?*pFrameInfo,?LONG?nReserved1,?LONG?nReserved2)??
  • void?CALLBACK?DecCBFun(LONG?nPort,?char?*pBuf,?LONG?nSize,?FRAME_INFO?*pFrameInfo,?void*?nReserved1,?LONG?nReserved2)??
  • {??
  • ???long?lFrameType?=?pFrameInfo->nType;??
  • ??
  • ?????if?(lFrameType?==?T_YV12)??
  • ?????{??
  • ??????//cv::Mat?dst(pFrameInfo->nHeight,?pFrameInfo->nWidth,??
  • ??????//????????????CV_8UC3);??//?8UC3表示8bit?uchar無符號類型,3通道值??
  • ???????????dst.create(pFrameInfo->nHeight,?pFrameInfo->nWidth,??
  • ?????????????????CV_8UC3);??
  • ??
  • ???????????cv::Mat?src(pFrameInfo->nHeight?+?pFrameInfo->nHeight?/?2,?pFrameInfo->nWidth,?CV_8UC1,?(uchar?*)pBuf);??
  • ???????????cv::cvtColor(src,?dst,?CV_YUV2BGR_YV12);??
  • ???????????pthread_mutex_lock(&mutex);??
  • ???????????g_frameList.push_back(dst);??
  • ???????????pthread_mutex_unlock(&mutex);??
  • ?????}??
  • ????usleep(1000);??
  • ??
  • ???//cv::Mat?src(pFrameInfo->nHeight?+?pFrameInfo->nHeight?/?2,?pFrameInfo->nWidth,?CV_8UC1,?(uchar?*)pBuf);??
  • ???//cv::cvtColor(src,?dst,?CV_YUV2BGR_YV12);??
  • ???//cv::imshow("bgr",?dst);??
  • ???//pthread_mutex_lock(&mutex);??
  • ???//g_frameList.push_back(dst);??
  • ???//pthread_mutex_unlock(&mutex);??
  • ???//vw?<<?dst;??
  • ???//cv::waitKey(10);??
  • ??
  • }??
  • ??
  • void?CALLBACK?g_RealDataCallBack_V30(LONG?lRealHandle,?DWORD?dwDataType,?BYTE?*pBuffer,?DWORD?dwBufSize,void*?dwUser)??
  • {??
  • ???/*?
  • ???if?(dwDataType?==?1)?
  • ???{?
  • ???????PlayM4_GetPort(&nPort);?
  • ???????PlayM4_SetStreamOpenMode(nPort,?STREAME_REALTIME);?
  • ???????PlayM4_OpenStream(nPort,?pBuffer,?dwBufSize,?1024?*?1024);?
  • ???????PlayM4_SetDecCallBackEx(nPort,?DecCBFun,?NULL,?NULL);?
  • ???????PlayM4_Play(nPort,?h);?
  • ???}?
  • ???else?
  • ???{?
  • ???????BOOL?inData?=?PlayM4_InputData(nPort,?pBuffer,?dwBufSize);?
  • ???}*/??
  • ???DWORD?dRet;??
  • ???switch?(dwDataType)??
  • ???{??
  • ?????case?NET_DVR_SYSHEAD:???????????//系統(tǒng)頭??
  • ???????if?(!PlayM4_GetPort(&nPort))??//獲取播放庫未使用的通道號??
  • ???????{??
  • ?????????break;??
  • ???????}??
  • ???????if?(dwBufSize?>?0)?{??
  • ?????????if?(!PlayM4_SetStreamOpenMode(nPort,?STREAME_REALTIME))?{??
  • ???????????dRet?=?PlayM4_GetLastError(nPort);??
  • ???????????break;??
  • ?????????}??
  • ?????????if?(!PlayM4_OpenStream(nPort,?pBuffer,?dwBufSize,?1024?*?1024))?{??
  • ???????????dRet?=?PlayM4_GetLastError(nPort);??
  • ???????????break;??
  • ?????????}??
  • ?????????//設(shè)置解碼回調(diào)函數(shù)?只解碼不顯示??
  • ????????//??if?(!PlayM4_SetDecCallBack(nPort,?DecCBFun))?{??
  • ????????//?????dRet?=?PlayM4_GetLastError(nPort);??
  • ????????//?????break;??
  • ????????//??}??
  • ??
  • ?????????//設(shè)置解碼回調(diào)函數(shù)?解碼且顯示??
  • ?????????if?(!PlayM4_SetDecCallBackEx(nPort,?DecCBFun,?NULL,?NULL))??
  • ?????????{??
  • ???????????dRet?=?PlayM4_GetLastError(nPort);??
  • ???????????break;??
  • ?????????}??
  • ??
  • ?????????//打開視頻解碼??
  • ?????????if?(!PlayM4_Play(nPort,?h))??
  • ?????????{??
  • ???????????dRet?=?PlayM4_GetLastError(nPort);??
  • ???????????break;??
  • ?????????}??
  • ??
  • ?????????//打開音頻解碼,?需要碼流是復合流??
  • ?????????if?(!PlayM4_PlaySound(nPort))?{??
  • ???????????dRet?=?PlayM4_GetLastError(nPort);??
  • ???????????break;??
  • ?????????}??
  • ???????}??
  • ???????break;??
  • ???????//usleep(500);??
  • ?????case?NET_DVR_STREAMDATA:??//碼流數(shù)據(jù)??
  • ???????if?(dwBufSize?>?0?&&?nPort?!=?-1)?{??
  • ?????????BOOL?inData?=?PlayM4_InputData(nPort,?pBuffer,?dwBufSize);??
  • ?????????while?(!inData)?{??
  • ???????????sleep(100);??
  • ???????????inData?=?PlayM4_InputData(nPort,?pBuffer,?dwBufSize);??
  • ???????????std::cerr?<<?"PlayM4_InputData?failed?\n"?<<?std::endl;??
  • ?????????}??
  • ???????}??
  • ???????break;??
  • ???}??
  • }??
  • ??
  • void?CALLBACK?g_ExceptionCallBack(DWORD?dwType,?LONG?lUserID,?LONG?lHandle,?void?*pUser)??
  • {??
  • ???char?tempbuf[256]?=?{0};??
  • ???std::cout?<<?"EXCEPTION_RECONNECT?=?"?<<?EXCEPTION_RECONNECT?<<?std::endl;??
  • ???switch(dwType)??
  • ???{??
  • ???case?EXCEPTION_RECONNECT:????//預覽時重連??
  • ???????printf("pyd----------reconnect--------%d\n",?time(NULL));??
  • ???????break;??
  • ???default:??
  • ???????break;??
  • ???}??
  • }??
  • ??
  • void?*RunIPCameraInfo(void?*)??
  • {??
  • ???char?IP[]?????????=?"192.168.**.***";???//海康威視網(wǎng)絡(luò)攝像頭的ip??
  • ???char?UName[]?=?"****";?????????????????//海康威視網(wǎng)絡(luò)攝像頭的用戶名??
  • ???char?PSW[]??????=?"*****";???????????//海康威視網(wǎng)絡(luò)攝像頭的密碼??
  • ???NET_DVR_Init();??
  • ???NET_DVR_SetConnectTime(2000,?1);??
  • ???NET_DVR_SetReconnect(1000,?true);??
  • ???NET_DVR_SetLogToFile(3,?"./sdkLog");??
  • ???NET_DVR_DEVICEINFO_V30?struDeviceInfo?=?{0};??
  • ???NET_DVR_SetRecvTimeOut(5000);??
  • ???lUserID?=?NET_DVR_Login_V30(IP,?8000,?UName,?PSW,?&struDeviceInfo);??
  • ??
  • ???NET_DVR_SetExceptionCallBack_V30(0,?NULL,?g_ExceptionCallBack,?NULL);??
  • ??
  • ???long?lRealPlayHandle;??
  • ???NET_DVR_CLIENTINFO?ClientInfo?=?{0};??
  • ??
  • ???ClientInfo.lChannel???????=?1;??
  • ???ClientInfo.lLinkMode?????=?0;??
  • ???ClientInfo.hPlayWnd?????=?0;??
  • ???ClientInfo.sMultiCastIP?=?NULL;??
  • ??
  • ??
  • ???//lRealPlayHandle?=?NET_DVR_RealPlay_V30(lUserID,?&ClientInfo,?PsDataCallBack,?NULL,?0);??
  • ???lRealPlayHandle?=?NET_DVR_RealPlay_V30(lUserID,?&ClientInfo,?g_RealDataCallBack_V30,?NULL,?0);??
  • ???//NET_DVR_SaveRealData(lRealPlayHandle,?"/home/lds/source/yuntai.mp4");??
  • ???if?(lRealPlayHandle?<?0)??
  • ???{??
  • ???????printf("pyd1---NET_DVR_RealPlay_V30?error\n");??
  • ???}??
  • ???sleep(-1);??
  • ??
  • ???NET_DVR_Cleanup();??
  • }??
  • ??
  • int?main(int?argc,?char?*argv[])??
  • {??
  • ??
  • ???pthread_t?getframe;??
  • ??
  • ???pthread_mutex_init(&mutex,?NULL);??
  • ???int?ret;??
  • ??
  • ???ret?=?pthread_create(&getframe,?NULL,?RunIPCameraInfo,?NULL);??
  • ??
  • ??
  • ???if(ret!=0)??
  • ???{??
  • ???????printf("Create?pthread?error!\n");??
  • ???}??
  • ??
  • ???cv::Mat?image;??
  • ???while(1)??
  • ???{??
  • ???????pthread_mutex_lock(&mutex);??
  • ???????if(g_frameList.size())??
  • ???????{??
  • ???????????std::list<cv::Mat>::iterator?it;??
  • ???????????it?=?g_frameList.end();??
  • ???????????it--;??
  • ???????????image?=?(*(it));??
  • ???????????if?(!image.empty())??
  • ???????????{??
  • ???????????????imshow("frame?from?camera",image);??
  • ???????????????cv::waitKey(1);??
  • ???????????}??
  • ???????????g_frameList.pop_front();??
  • ???????}??
  • ???????g_frameList.clear();?//?丟掉舊的幀??
  • ???????pthread_mutex_unlock(&mutex);??
  • ???}??
  • ??
  • ???return?0;??
  • } ?

  • 總結(jié)

    以上是生活随笔為你收集整理的ubuntu 通过 海康sdk调用摄像头抓图片的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

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