【1】关于如何在C++中调用Python脚本,并在python中对话框选中文件传输问题
·
0 需求
需求:在C++写的Qt界面中,调用Python程序实现图像信息统计,但是需要手动对话框选择文件,并传输路径。
1 整体思路
(1)、第一种方法是在Qt中调用对话框选择图片(QFileDialog::getOpenFileName),然后将路径做为参数传输至(QProcess::execute)。
(2)、第二种方法是在Python中调用对话框选择图片的函数,获取路径字符串,在进行后续统计。
2、先上结论(亲测好用)
最终选用第二种方法,用tkinter调用GUI获取图片路径,然后再调用opencv进行显示,代码如下:
import cv2 as cv
import matplotlib.pyplot as plt
import numpy as np
import tkinter as tk
from tkinter import filedialog
FilePath = filedialog.askopenfilename(title='Select a image', initialdir='./')
src = cv.imread(FilePath)
cv.namedWindow('src')
cv.imshow('src',src)
cv.waitKey()
cv.destroyAllWindows()
print(FilePath)
3、踩到的坑
<1>、基于C++的Qt在获取文件路径方面没有问题,关键是传输到Python文件时,很麻烦,报错且没有解决并且不知道QString,是否和Python的String出现冲突,部分C++代码如下:
QString OpenFile, OpenFilePath;
OpenFile = QFileDialog::getOpenFileName(this,
"please choose an image file",
"",
"Image Files(*.jpg *.png *.bmp *.pgm *.pbm);;All(*.*)");
Mat src = imread(OpenFile.toStdString());
namedWindow("src");
//imshow("src",src);
QProcess::startDetached("python ./Analyze.py",OpenFile);
报错如下:
error: no matching function for call to 'execute'
<2> 在Python主程序调用Pyqt5的打开文件出现异常退出,并没有显示选择框。
from PyQt5 import QtCore, QtGui, QtWidgets
from PyQt5.QtCore import *
from PyQt5.QtWidgets import *
from PyQt5.QtGui import *
import cv2
import sys
OpenFilePath = QFileDialog.getOpenFileName(None)
print(OpenFilePath)
报错如下:
Process finished with exit code -1073740791 (0xC0000409)
4、最终解决与参考
最终解决如2所示,用的tkinter,另外,tkinter是系统自带,不需要pip;
参考这个方法
1、tkinter打开文件
2、具体参数
更多推荐

所有评论(0)