mac上c++调用python,执行opencv程序

具体的介绍一搜一堆,这里不赘述,只描述我遇到的问题

首先直接调用python语句测试一下可不可以用

#include "python/Python.h"

int main()
{
    Py_Initialize();    ## 初始化

    PyRun_SimpleString("print 'hello'");

    Py_Finalize();      ## 释放资源
}

然后开始测试调用.py文件中的函数,此时需要将py文件的路径添加到工作路径中

PyRun_SimpleString("import sys");
PyRun_SimpleString("print '---import sys---'");

这里是当前路径添加到工作路径中,注意此时的当前路径不是.cpp文件的路径,而是生成的可执行程序的路径,这个路径问题困扰了我很久,在xcode中,生成文件的路径是在一个Debug文件夹中,可以在左边栏右键可执行文件,然后右击show in Finder,然后把.py文件拷贝到其中 

PyRun_SimpleString("sys.path.append('./')");

这里的路径是绝对路径,教程中的~test路径不行,这里的路径通过打开finder,上面的文件选项卡,然后显示简介,将里面的路径拷贝到绝对路径中   

PyRun_SimpleString("sys.path.append('/Users/junweiyu/Desktop/test1')");

然后加载模块,执行加法运算就可以执行了 

#test function
import sys
print(sys.path)
img = cv2.imread('1.png')
print(img)
def add(a,b):
    print "in python function add"
    print "a = " + str(a)
    print "b = " + str(b)
    print "ret = " + str(a+b)
    return

 然后我需要做的程序是C++嗲用python,python中用opencv进行处理图片,
import cv2 可能会出现问题,我遇到的有下面几个问题:
1.no module named cv2
#你没安装包的情况就不说了,这个就pip install opencv-python即可
#但是如果安装了还找不到呢?首先,c++调用python默认调用的是mac系统自带的python2.7
#可能你python能运行是因为你的python3中含有opencv,python2中没有,pip2 install即可
#还有一个原因就是你的工作路径和系统路径中找不到opencv包,这时,你pip2 install #opencv-python,可以显示出你opencv的路径,
#Requirement already satisfied: opencv-python in /usr/local/lib/python2.7/site-packages (3.4.2.17)
然后在c++程序中加上一句

PyRun_SimpleString("sys.path.append('/usr/local/lib/python2.7/site-packages')");

此时就应该可以找到opencv包了,但是新的错误又出现了。
module compiled against API version 0xa but this version of numpy is 0x9
你会发现明明自己site-packages里面的包就是最新的,为什么他说你的版本太低呢?
因为执行这段程序的时候它自动调用了系统自带的numpy包,更新这个包也是有教程的,但是我直接暴力的给删掉了,路径大概是
/系统/资源库/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/
cd到这个路径里面,然后sudo rm -rf numpy ,输入密码,就OK了,这时我的程序还有可能在中途死掉,因为python程序如果出错他是不会报哪里有错误的,就是卡在哪里,所以建议的就是在命令行中执行一下你的python程序,用python2,看看有没有少包之类的情况发生,如果你的python调通了,那大概程序就不会出什么错误了。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值