2018-09-03:python 调用C++函数 && C++调取海康摄像头照片

C++调取海康摄像头:
首先下载 海康摄像头 linux 版本的SDK: CH_HCNetSDK_V5.3.5.2_build20171124_Linux64.zip
解压后进入consoleDemo目录,这里是官方提供的Demo代码,可以实现多个测试功能:

        printf("Input 1, Test GetStream\n");
        printf("      2, Test Configure params\n");
        printf("      3, Test Alarm\n");
        printf("      4, Test Capture Picture\n");
        printf("      5, Test play back\n");
        printf("      6, Test Voice\n");
        printf("      7, Test SDK ability\n");
        printf("      8, Test tool interface\n");

上面就是consoleMain.cpp主函数里统计的方法入口.
在用Makefile文件编译的时候,需要将CH_HCNetSDK_V5.3.5.2_build20171124_Linux64/lib中的所有的文件复制到CH_HCNetSDK_V5.3.5.2_build20171124_Linux64/consoleDemo/linux64/lib中


image.png

之后进入CH_HCNetSDK_V5.3.5.2_build20171124_Linux64/consoleDemo/linux64/proj目录:
cd CH_HCNetSDK_V5.3.5.2_build20171124_Linux64/consoleDemo/linux64/proj
目录中有一个Makefile文件,直接执行 make 命令就可以编译了.
编译成功后,进入目录: CH_HCNetSDK_V5.3.5.2_build20171124_Linux64/consoleDemo/linux64
会生成一个可执行文件:sdkTest
直接执行./sdkTest 就启动了
按照提示输入1-8即可体验上面列出的功能.
例如输入:4
就会抓取摄像头的照片,并保存为ssss.jpeg文件

通过改造,就可以将摄像头的照片一直保存到本地了,
顺便把consoleMain.cpp文件删掉,或把里面的main函数去掉,在CapPicture.cpp中添加main函数,这样直接编译后就进入CapPicture.cpp中的main函数了, 改造代码如下:

/*
* Copyright(C) 2010,Hikvision Digital Technology Co., Ltd 
* 
* File   name��CapPicture.cpp
* Discription��
* Version    ��1.0
* Author     ��panyd
* Create Date��2010_3_25
* Modification History��
*/

#include "public.h"
#include "CapPicture.h"
#include <stdio.h>
#include <time.h>

/*******************************************************************
      Function:   Demo_Capture
   Description:   Capture picture.
     Parameter:   (IN)   none 
        Return:   0--success��-1--fail.   
**********************************************************************/

using namespace std;

int Demo_Capture()
{
    NET_DVR_Init();
    long lUserID;
    //login
    NET_DVR_DEVICEINFO_V30 struDeviceInfo;
    lUserID = NET_DVR_Login_V30("10.200.16.30", 8000, "admin", "admin1234", &struDeviceInfo);
    if (lUserID < 0)
    {
        printf("pyd1---Login error, %d\n", NET_DVR_GetLastError());
        return HPR_ERROR;
    }

    //
    NET_DVR_JPEGPARA strPicPara = {0};
    strPicPara.wPicQuality = 2;
    strPicPara.wPicSize = 0;
    int iRet;
    iRet = NET_DVR_CaptureJPEGPicture(lUserID, struDeviceInfo.byStartChan, &strPicPara, "./ssss.jpeg");
    if (!iRet)
    {
        printf("pyd1---NET_DVR_CaptureJPEGPicture error, %d\n", NET_DVR_GetLastError());
        return HPR_ERROR;
    }


    LPNET_DVR_JPEGPARA JpegPara = new NET_DVR_JPEGPARA;  
    JpegPara->wPicQuality = 0;  
    JpegPara->wPicSize = 9;  
    char * Jpeg = new char[200*1024];  
    DWORD len = 200*1024;  
    LPDWORD Ret = 0;  
    
    if(!NET_DVR_SetCapturePictureMode(BMP_MODE))  
    {  
        printf("Set Capture Picture Mode error!");  
        printf("The error code is %d", NET_DVR_GetLastError());  
    }  

    printf("AAAAAAAAAA!"); 
    //bool capture = NET_DVR_CaptureJPEGPicture(lUserID,1,JpegPara,"1111");  

    int i = 0;
    time_t t_start, t_end; 
    while(1) 
    {
         t_start = time(NULL);
        // printf("begin[%d]:%ld",i,getCurrentTime()); 
        bool capture = NET_DVR_CaptureJPEGPicture_NEW(lUserID,struDeviceInfo.byStartChan,JpegPara,Jpeg,len,Ret);  
        if(!capture)  
        {  
            printf("Error: NET_DVR_CaptureJPEGPicture_NEW = %d", NET_DVR_GetLastError());  
            return -1;    
        }
        printf("BBBBBBBBBBBB!"); 
        // for(int i=0;i<200*1024;i++)  
        // {
        //     printf("%d:%c",i,Jpeg[i]); 
        // }   

        FILE* fp;
        char fname[50] = {};
        sprintf(fname, "%s%d%s", "qqqq_", i++, ".jpg");
        fp = fopen(fname,"wb+"); //wb+ 以读写方式打开或建立二进制文件
        if(fp == NULL)
        {
            return false;//建立失败
        }
        fwrite(Jpeg,sizeof(char),200*1024,fp);//按字写入buffer,共size字节
        fclose(fp); 
        t_end = time(NULL);
         printf("time[%d]: %.0f s\n",i,difftime(t_end,t_start));
    }

    // vector<char> data(200*1024); 


    // while(1)  
    // {  
    //     bool capture = NET_DVR_CaptureJPEGPicture_NEW(lUserID,struDeviceInfo.byStartChan,JpegPara,Jpeg,len,Ret);  
    //     if(!capture)  
    //     {  
    //         printf("Error: NET_DVR_CaptureJPEGPicture_NEW = %d", NET_DVR_GetLastError());  
    //         return -1;    
    //     }     
  
    //     for(int i=0;i<200*1024;i++)  
    //         data[i] = Jpeg[i];  
  
    //     Mat img = imdecode(Mat(data),1);  
    //     imshow("camera",img);  
    //     waitKey(1);   
    // }  

    //logout
    NET_DVR_Logout_V30(lUserID);
    NET_DVR_Cleanup();

    return HPR_OK;

}

int main()
{
    Demo_Capture();
    printf("ddddddd, Test Capture Picture\n");
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 226,197评论 6 524
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 97,254评论 3 410
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 173,718评论 0 370
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 61,801评论 1 305
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 70,732评论 6 404
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 54,200评论 1 318
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 42,389评论 3 433
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 41,484评论 0 282
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 48,024评论 1 328
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 40,013评论 3 352
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 42,125评论 1 359
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 37,698评论 5 353
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 43,407评论 3 342
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 33,795评论 0 25
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 34,996评论 1 278
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 50,724评论 3 384
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 47,150评论 2 368