您的位置:首页 >科技 >

cr2格式如何打开?c++调用python函数教程来啦

2022-01-13 16:41:55    来源:骁龙生活网

最近帮朋友处理一个.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脚本拷贝到我们项目文件中

生成解决方案:

运行结果

标签: python cr2格式如何打开 c++调用 jpg格式

相关阅读