cr2格式如何打开?c++调用python函数教程来啦
最近帮朋友处理一个.CR2图片格式转jpg。因为他是用C++编程的,让我写个python脚本,将cr2格式转为jpg格式,所以会涉及到C++调用python函数,下面给大家分享一下过程。
首先我们写一个CR2CVTJPG.py的文件
import numpy as np
from PIL import Image
from rawkit.raw import Raw
from rawkit.options import WhiteBalance
import os.path
import glob
def 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:UsersLeowenDesktopimage"+"*.CR2")
# 循环处理单个图片
for (i,imagePath) in enumerate(imagePaths):
with Raw(filename=imagePath) as raw:
raw.options.white_balance = WhiteBalance(camera=False, auto=True)
outputpath = "C:UsersLeowenDesktop" +str(i) + ".ppm"
raw.save(filename=outputpath)
img = Image.open(outputpath)
jpgoutputpath = "C:UsersLeowenDesktop" +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:UsersLeowenAnaconda3");
Py_Initialize();
if (!Py_IsInitialized())
return -1;
const char *scriptDirectoryName = "C:UsersLeowenDesktop20181130testConsoleApplication1ConsoleApplication1";
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脚本拷贝到我们项目文件中
生成解决方案:
运行结果
相关阅读
-
cr2格式如何打开?c++调用python函数教程来啦
最近帮朋友处理一个 CR2图片格式转jpg。因为他是用C++编程的,让我... -
淘宝昵称终于可以修改了 淘宝昵称修改...
关于淘宝昵称不能修改这个事不知道坑爹的淘宝被骂了多少回现在登录... -
对焦是什么意思?拍照时为什么要对焦?
对焦是成功拍摄的重要前提之准确对焦可以让主体在画面中清晰呈现,反... -
win8系统好用吗?win7和win10系统功能对比
一、win7和win10系统功能对比1、开始菜单对比开始菜单是用户最关心... -
百度阿拉丁通道是什么意思?百度新闻源...
百度阿拉丁通道是什么意思通过百度阿拉丁平台申请开放给独特信息数... -
国外虚拟主机推荐榜 美国虚拟主机排行大全
对于流量规模不大的网站大多会采用虚拟主机进行搭建,但许多站长不...