最近帮朋友处理一个.CR2图片格式转jpg。因为他是用C++编程的,让我写个python脚本,将cr2格式转为jpg格式,所以会涉及到C++调用python函数,下面给大家分享一下过程。
首先我们写一个CR2CVTJPG.py的文件
import numpy as npfrom PIL import Imagefrom rawkit.raw import Rawfrom rawkit.options import WhiteBalanceimport os.path import globdef cr2cvtjpg(): basepath = os.path.dirname(os.path.abspath(r'C:UsersLeowenAnaconda3Libsite-packagesLibRaw-0.18.13inlibraw.dll')) os.environ['PATH'] = basepath +os.pathsep + os.environ['PATH'] # 获取图片 imagePaths = glob.glob("C:\Users\Leowen\Desktop\image"+"\*.CR2") # 循环处理单个图片 for (i,imagePath) in enumerate(imagePaths): with Raw(filename=imagePath) as raw: raw.options.white_balance = WhiteBalance(camera=False, auto=True) outputpath = "C:\Users\Leowen\Desktop\" +str(i) + ".ppm" raw.save(filename=outputpath) img = Image.open(outputpath) jpgoutputpath = "C:\Users\Leowen\Desktop\" +str(i) + ".jpg" img.save(jpgoutputpath)
这个python程序就不解释了,这是python的知识,我们这里主要将C++调用python函数。
我用anaconda3安装的python36。VS编辑器用的是VS2015.
首先我们新建一个项目
然后新建一个main.cpp文件。在我们属性管理器中,修改我们的项目的解决方案平台x64。
main.cpp内容为:
#include #include int main(int argc, char* argv[]){ // init python Py_SetPythonHome(L"C:\Users\Leowen\Anaconda3"); Py_Initialize(); if (!Py_IsInitialized()) return -1; const char *scriptDirectoryName = "C:\Users\Leowen\Desktop\20181130test\ConsoleApplication1\ConsoleApplication1"; Py_Initialize(); PyObject *sysPath = PySys_GetObject("path"); PyObject *path = PyUnicode_FromString(scriptDirectoryName); int result = PyList_Insert(sysPath, 0, path); PyObject *pModule = PyImport_ImportModule("CR2CVTJPG"); // load python script if (!pModule) { std::cout << "can't find CR2CVTJPG.py" << std::endl; return -1; } // PyObject* pDict = PyModule_GetDict(pModule); if (!pDict) { return -1; } // get "add" function PyObject* pFunc = PyDict_GetItemString(pDict, "cr2cvtjpg"); if (!pFunc || !PyCallable_Check(pFunc)) { std::cout << "can't find function [cr2cvtjpg]" << std::endl; return -1; } // parameter //PyObject *pArgs = PyTuple_New(2); //两个参数 //PyTuple_SetItem(pArgs, 0, Py_BuildValue("l", 3)); //PyTuple_SetItem(pArgs, 1, Py_BuildValue("l", 4)); // call python script //PyObject_CallObject(pFunc, pArgs);//调用函数 PyObject_CallObject(pFunc,NULL);//调用函数 // //Py_DECREF(pName); //Py_DECREF(pArgs);//打印调用信息 Py_DECREF(pModule); // close python Py_Finalize(); return 0;}
接着我们配置项目属性
将python的头文件(比如C:UsersLeowenAnaconda3include)添加到, 项目属性页->VC++目录-> 包含目录。
将python.lib文件(比如C:UsersLeowenAnaconda3libs)添加到,配置->链接器->输入->附加依赖项。
接下来修改pyconfig.h文件。
找到C:UsersLeowenAnaconda3includepyconfig.h文件,打开文件,搜索python36_d.lib,将
# if defined(_DEBUG)# pragma comment(lib,"python36_d.lib")
修改为:
# if defined(_DEBUG)# pragma comment(lib,"python36.lib")
再搜索Py_DEBUG,将
#ifdef _DEBUG# define Py_DEBUG#endif
修改为:
#ifdef _DEBUG//# define Py_DEBUG#endif
接下来,将我们的python脚本拷贝到我们项目文件中
生成解决方案:
运行结果
职称论文字号格式属于论文格式要求的一部分,格式问题向来是最基本的要求,也有很多作者特别容易忽视格式方面的要求,觉得写论文学生时代就写过,职称论文与其他论文还是有一些不同之处的,因此,格式问题需要引...
现在的文件格式千千万,接收文件时难免会遇到几个陌生的文件格式,比如ai格式,那么ai格式用什么软件来打开呢?今天小编就给大家介绍一下是PS软件和Adobe illustrator软件打开ai格式的方法...
相信大家平时在使用电脑的时候都遇到后缀名为dat的文件,但却又不知道是什么意思,更不要是怎么打开了。为此,接下来小编就给大家介绍dat文件怎么打开的方法,大家有不妨来瞧瞧啊~ 1,,音视频文件,一般...
这位兄弟想请假去南京向意中人表白,虽然看上去不务正业,上级看完后感动死了,审批结语更让人振奋、成功有奖励。有这样通情达理的领导,当然要效力犬马之劳了。 这个天书,就不怕主管老师不领情,绝对看...
经常有小伙伴问小编,收据要怎么写?收据有哪些格式?有没有范文?今天会计网小编给大家来说说收据的格式。 一个完整的收条,通常应由标题、正文、落款三部分组成。 1.标题 标题写在正文上方中间位置,字...
为什么视频有那么多格式? 这有两个方面的原因吧!首先各种视频软件的发行公司不同,故转换出来的格式就不一样啦!其次就是各种格式的功能不一样了,有些视频我们需要将它压缩到很小,有些我们则要保证无损音质,...