1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131
|
From 24cff08086b573c3341e91d072430c9f624a2208 Mon Sep 17 00:00:00 2001
From: Tiago Koji Castro Shibata <tiago.shibata@gmail.com>
Date: Fri, 28 Dec 2018 23:13:14 -0200
Subject: [PATCH 3/5] Fix compilation with latest OpenCV
C APIs were removed and must be replaced with C++ calls
---
Makefile | 4 +--
src/image_opencv.cpp | 58 +++++++++++++++++---------------------------
2 files changed, 24 insertions(+), 38 deletions(-)
diff --git a/Makefile b/Makefile
index 63e15e6..c148d4b 100644
--- a/Makefile
+++ b/Makefile
@@ -42,8 +42,8 @@ CFLAGS+=$(OPTS)
ifeq ($(OPENCV), 1)
COMMON+= -DOPENCV
CFLAGS+= -DOPENCV
-LDFLAGS+= `pkg-config --libs opencv` -lstdc++
-COMMON+= `pkg-config --cflags opencv`
+LDFLAGS+= `pkg-config --libs opencv 2> /dev/null || pkg-config --libs opencv4` -lstdc++
+COMMON+= `pkg-config --cflags opencv 2> /dev/null || pkg-config --cflags opencv4`
endif
ifeq ($(GPU), 1)
diff --git a/src/image_opencv.cpp b/src/image_opencv.cpp
index 7511280..baab686 100644
--- a/src/image_opencv.cpp
+++ b/src/image_opencv.cpp
@@ -9,30 +9,36 @@ using namespace cv;
extern "C" {
-IplImage *image_to_ipl(image im)
+Mat image_to_mat(image im)
{
+ assert(im.c == 3 || im.c == 1);
int x,y,c;
- IplImage *disp = cvCreateImage(cvSize(im.w,im.h), IPL_DEPTH_8U, im.c);
- int step = disp->widthStep;
+ image copy = copy_image(im);
+ constrain_image(copy);
+ if(im.c == 3) rgbgr_image(copy);
+ unsigned char *data = (unsigned char *)malloc(im.w * im.h * im.c);
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);
+ float val = copy.data[c*im.h*im.w + y*im.w + x];
+ data[y*im.w*im.c + x*im.c + c] = (unsigned char)(val*255);
}
}
}
- return disp;
+ Mat m(im.h, im.w, CV_MAKETYPE(CV_8U, im.c), data);
+ free_image(copy);
+ free(data);
+ return m;
}
-image ipl_to_image(IplImage* src)
+image mat_to_image(Mat m)
{
- int h = src->height;
- int w = src->width;
- int c = src->nChannels;
+ int h = m.rows;
+ int w = m.cols;
+ int c = m.channels();
image im = make_image(w, h, c);
- unsigned char *data = (unsigned char *)src->imageData;
- int step = src->widthStep;
+ unsigned char *data = (unsigned char*)m.data;
+ int step = m.step;
int i, j, k;
for(i = 0; i < h; ++i){
@@ -42,26 +48,6 @@ image ipl_to_image(IplImage* src)
}
}
}
- 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;
}
@@ -72,9 +58,9 @@ void *open_video_stream(const char *f, int c, int w, int h, int fps)
if(f) cap = new VideoCapture(f);
else cap = new VideoCapture(c);
if(!cap->isOpened()) return 0;
- if(w) cap->set(CV_CAP_PROP_FRAME_WIDTH, w);
- if(h) cap->set(CV_CAP_PROP_FRAME_HEIGHT, w);
- if(fps) cap->set(CV_CAP_PROP_FPS, w);
+ 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;
}
@@ -123,7 +109,7 @@ void make_window(char *name, int w, int h, int fullscreen)
{
namedWindow(name, WINDOW_NORMAL);
if (fullscreen) {
- setWindowProperty(name, CV_WND_PROP_FULLSCREEN, CV_WINDOW_FULLSCREEN);
+ setWindowProperty(name, WND_PROP_FULLSCREEN, WINDOW_FULLSCREEN);
} else {
resizeWindow(name, w, h);
if(strcmp(name, "Demo") == 0) moveWindow(name, 0, 0);
--
2.23.0
|