首页 > 解决方案 > 使用来自 QFileDialog Python 的 openCV 读取图像

问题描述

我正在尝试对上传的图像应用预处理。但图像不是用opencv读取的,所有预处理都没有应用。
PyQt5 - 主窗口:

fname = QFileDialog.getOpenFileName(self, 'Open file', 'c:\\', "Image files (*.jpg *.gif *.png)")
imagePath = fname[0]

extractedText=imageToText.getImage(imagePath)

----另一个图像类--------

def getImage(string):
        img= cv2.imread(string)
        finalImage = pre_processing(img)
        extractedText = "anything"
        return extractedText 
    def pre_processing(img):
        resized = img
        if (img.shape[1] > 500) and (img.shape[0] > 500): #error (no shape)
           resized = cv2.resize(img,None, fx=0.8,fy=0.8, interpolation = cv2.INTER_CUBIC)

        gray = cv2.cvtColor(resized, cv2.COLOR_BGR2GRAY)  # error in cvtcolor
        th_val, th_img = cv2.threshold(gray, 0, 255, cv2.THRESH_BINARY + cv2.THRESH_OTSU)
        blur = cv2.GaussianBlur(th_img, (3, 3), 0)
        return blur

是路径的问题吗?或者文件类型与opencv不兼容?在我使用 cv2.imread('test.jpg') 但现在使用“QFileDialog.getOpenFileName”之前没有任何工作正常来自(imagePath)的问题

错误:

OpenCV(3.4.2)
c:\miniconda3\conda-bld\opencv-suite_1534379934306\work\modules\imgproc\src\color.hpp:253:
error: (-215:Assertion failed)
VScn::contains(scn) && VDcn::contains(dcn) && VDepth::contains(depth)
in function 'cv::CvtHelper<struct cv::Set<3,4,-1>,struct cv::Set<1,-1,-1>,struct cv::Set<0,2,5>,2>::CvtHelper'

标签: pythonopencvpyqtanaconda

解决方案


下面的代码从 QFileDialog 提供的路径打开一个图像。目前尚不清楚您的 imageToText 类在做什么,所以问题可能出在那儿。改用 cv2.imread() 并使用返回的矩阵。

class(QMainWindow):
__init__(self):
    self.openFile = QAction(QIcon('open.png'), 'Open', self)
    self.openFile.setShortcut('Ctrl+l')
    self.openFile.setStatusTip('Open new File')
    self.openFile.triggered.connect(self.showDialog)
    menubar = self.menuBar()
    fileMenu = menubar.addMenu('&File')
    fileMenu.addAction(self.openFile)
    self.setObjectName("MainWindow")
    self.resize(800, 600)

def showDialog(self):
    fname = QFileDialog.getOpenFileName(self, 'open file', '/home')
    print(fname[0])
    import cv2
    a = cv2.imread(fname[0])
    cv2.imshow("a", a)
    cv2.waitKey(0)

推荐阅读