nvidia jetson xavier NX가 darknet을 컴파일할 때 opencv 오류를 알립니다. error:'IplImage'does not name a type;did you mean

nvidia jetson xavier NX에 오픈cv를 설치한 다음darknet을 컴파일하여 error:'IplImage'does not name a type를 제시한다.did you mean ‘image’?
해결 방법은 src 폴더에서 잘못된 image_를 찾는 것입니다opencv.cpp, 이 파일의 내용을 모두 다음 내용으로 바꿉니다.
 
#ifdef OPENCV

#include "stdio.h"
#include "stdlib.h"
#include "opencv2/opencv.hpp"
#include "image.h"

using namespace cv;

extern "C" {

Mat image_to_mat(image im)
{
    image copy = copy_image(im);
    constrain_image(copy);
    if(im.c == 3) rgbgr_image(copy);

    Mat m(cv::Size(im.w,im.h), CV_8UC(im.c));
    int x,y,c;

    int step = m.step;
    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];
                m.data[y*step + x*im.c + c] = (unsigned char)(val*255);
            }
        }
    }

    free_image(copy);
    return m;
}

image mat_to_image(Mat m)
{
    int h = m.rows;
    int w = m.cols;
    int c = m.channels();
    image im = make_image(w, h, c);
    unsigned char *data = (unsigned char *)m.data;
    int step = m.step;
    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.;
            }
        }
    }
    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

원본 블로그는 다음과 같습니다.https://blog.csdn.net/a135013563/article/details/104859395

좋은 웹페이지 즐겨찾기