MacOS-VScode-opencv4.3-yolov3-C++
MacOS-VScode-opencv4.3-yolov3-C++(测试成功)
本人10年前考了个计算机二级(c语言),再无其他开发经验,从0开始配置,将近半个月的摸索,写这篇文章也算是疏离一下自己的思路。期间借鉴了许多大神的文章,但是大神的文章多多少少都是给有那么一点基础的小神看的,次文章也算是对各位大神的致敬,由衷感谢🙏。
在命令行测试yolov3
1、安装Homebrew
https://brew.sh/index_zh-cn
然后需要将下载源切换至国内,网上挺多的,自行搜一下吧!
*brew的安装目录在/usr/local/caller,以后用brew安装的软件都会在这个文件夹,牢记这个地址,你会经常用它。打开制定文件夹的快捷键(shift+command+G)
2、安装安装wget
brew install wget
3、安装opencv
brew install opencv
*这样安装的是最新版本的,与yolov3存在兼容问题,下面再修改即可。
4、安装darknet
git clone https://github.com/pjreddie/darknet.git
5、编译
cd darknet(进入darknet文件夹)
make(编译)
6、下载训练模型权重
wget https://pjreddie.com/media/files/yolov3.weights
tiny版(简版):wget https://pjreddie.com/media/files/yolov3-tiny.weights
7、测试
./darknet detect cfg/yolov3.cfg yolov3.weights data/dog.jpg
肯定会报错,下面,重点来了。
如何解决darknet与opencv4的兼容问题
1、启用opencv
找到/Users/lixiaolong/darknet/makefile文件,打开,
将opencv=0改成opencv=1;
在cpp后增加“ -std=c++11”;
将LDFLAGS+= pkg-config --libs opencv -lstdc++
COMMON+= pkg-config --cflags opencv
改成LDFLAGS+= pkg-config --libs opencv4 -lstdc++
COMMON+= pkg-config --cflags opencv4 -DOPENCV4
2、修改./src/image_opencv.cpp文件
用下面代码替换原内容,为什么?网上搜一下吧,有相关解释。
#ifdef OPENCV
#include "stdio.h"
#include "stdlib.h"
#include "opencv2/opencv.hpp"
#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);
int x, y, c;
Mat m = Mat(Size(im.w, im.h), CV_8UC(im.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 = copy.data[c*im.h*im.w + y * im.w + x];
m.data[y*step + x * im.c + c] = (unsigned char)(val * 255);
}
}
}
/* 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);*/
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]

本文详细介绍了如何在MacOS环境下利用VSCode搭建支持OpenCV 4.3.0_3的C++开发环境,并通过配置环境变量、Makefile等步骤实现yolov3项目的顺利运行。
最低0.47元/天 解锁文章





