zoukankan      html  css  js  c++  java
  • OpenCV 4下darknet修改

    darknet的安装使用直接在官网上获取。https://pjreddie.com/darknet/

    但我用的是OpenCV4.1.1,make时会在image_opencv.cpp中有两个错误。

    1. IplImage未定义

        加上#include "opencv2/imgproc/imgproc_c.h"

    2. 一些CV_开头的标识未定义,删除CV_就可以了,如CV_WINDOW_NORMAL改成WINDOW_NORMAL就行了。

    整个image_opencv.cpp的代码如下:

    #ifdef OPENCV
    
    #include "stdio.h"
    #include "stdlib.h"
    #include "opencv2/opencv.hpp"
    #include "opencv2/imgproc/imgproc_c.h"
    #include "image.h"
    
    using namespace cv;
    
    extern "C" {
    
    IplImage *image_to_ipl(image im)
    {
        int x,y,c;
        IplImage *disp = cvCreateImage(cvSize(im.w,im.h), IPL_DEPTH_8U, im.c);
        int step = disp->widthStep;
        for(y = 0; y < im.h; ++y){
            for(x = 0; x < im.w; ++x){
                for(c= 0; c < im.c; ++c){
                    float val = im.data[c*im.h*im.w + y*im.w + x];
                    disp->imageData[y*step + x*im.c + c] = (unsigned char)(val*255);
                }
            }
        }
        return disp;
    }
    
    image ipl_to_image(IplImage* src)
    {
        int h = src->height;
        int w = src->width;
        int c = src->nChannels;
        image im = make_image(w, h, c);
        unsigned char *data = (unsigned char *)src->imageData;
        int step = src->widthStep;
        int i, j, k;
    
        for(i = 0; i < h; ++i){
            for(k= 0; k < c; ++k){
                for(j = 0; j < w; ++j){
                    im.data[k*w*h + i*w + j] = data[i*step + j*c + k]/255.;
                }
            }
        }
        return im;
    }
    
    Mat image_to_mat(image im)
    {
        image copy = copy_image(im);
        constrain_image(copy);
        if(im.c == 3) rgbgr_image(copy);
    
        IplImage *ipl = image_to_ipl(copy);
        Mat m = cvarrToMat(ipl, true);
        cvReleaseImage(&ipl);
        free_image(copy);
        return m;
    }
    
    image mat_to_image(Mat m)
    {
        IplImage ipl = m;
        image im = ipl_to_image(&ipl);
        rgbgr_image(im);
        return im;
    }
    
    void *open_video_stream(const char *f, int c, int w, int h, int fps)
    {
        VideoCapture *cap;
        if(f) cap = new VideoCapture(f);
        else cap = new VideoCapture(c);
        if(!cap->isOpened()) return 0;
        if(w) cap->set(CAP_PROP_FRAME_WIDTH, w);
        if(h) cap->set(CAP_PROP_FRAME_HEIGHT, w);
        if(fps) cap->set(CAP_PROP_FPS, w);
        return (void *) cap;
    }
    
    image get_image_from_stream(void *p)
    {
        VideoCapture *cap = (VideoCapture *)p;
        Mat m;
        *cap >> m;
        if(m.empty()) return make_empty_image(0,0,0);
        return mat_to_image(m);
    }
    
    image load_image_cv(char *filename, int channels)
    {
        int flag = -1;
        if (channels == 0) flag = -1;
        else if (channels == 1) flag = 0;
        else if (channels == 3) flag = 1;
        else {
            fprintf(stderr, "OpenCV can't force load with %d channels
    ", channels);
        }
        Mat m;
        m = imread(filename, flag);
        if(!m.data){
            fprintf(stderr, "Cannot load image "%s"
    ", filename);
            char buff[256];
            sprintf(buff, "echo %s >> bad.list", filename);
            system(buff);
            return make_image(10,10,3);
            //exit(0);
        }
        image im = mat_to_image(m);
        return im;
    }
    
    int show_image_cv(image im, const char* name, int ms)
    {
        Mat m = image_to_mat(im);
        imshow(name, m);
        int c = waitKey(ms);
        if (c != -1) c = c%256;
        return c;
    }
    
    void make_window(char *name, int w, int h, int fullscreen)
    {
        namedWindow(name, WINDOW_NORMAL); 
        if (fullscreen) {
            setWindowProperty(name, WND_PROP_FULLSCREEN, WINDOW_FULLSCREEN);
        } else {
            resizeWindow(name, w, h);
            if(strcmp(name, "Demo") == 0) moveWindow(name, 0, 0);
        }
    }
    
    }
    
    #endif
  • 相关阅读:
    ubuntu12.04 死机 卡屏 画面冻结解决方案
    Install Firefox 20 in Ubuntu 13.04, Ubuntu 12.10, Ubuntu 12.04, Linux Mint 14 and Linux Mint 13 by PPA
    ListView1.SelectedItems.Clear()
    android studio 下载地址
    jquery.slider.js jquery幻灯片测试
    jquery.hovermenu.js
    jquery.tab.js选项卡效果
    适配 placeholder,jquery版
    jquery.autoscroll.js jquery自动滚动效果
    将 Google Earth 地图集成到自己的窗体上的 简单控件
  • 原文地址:https://www.cnblogs.com/gloria-zhang/p/12844118.html
Copyright © 2011-2022 走看看