MacOS-VScode-opencv4.3-yolov3-C++(测试成功)

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

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] 
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值