将 QPixmap 转换为灰度

Converting QPixmap to grayscale

我正在尝试将 QPixmap 图像转换为灰度图像。但是,所有尝试过的解决方案都出现错误。

第一次尝试:

def convertCv2ToQimage(self, cv2image):
    height, width = cv2image.shape
    return QtGui.QImage(cv2image.copy().data, width, height, width, QtGui.QImage.Format_Grayscale8)

result = pixmap.copy(r)
Q_image = result.toImage()
raw_img = cv2.imread(Q_image)
gray_img = cv2.cvtColor(raw_img, cv2.COLOR_BGR2GRAY)
final_result =  self.convertCv2ToQimage(gray_img)
pixmap = QtGui.QPixmap.fromImage(final_result)
self.Changed_view.emit(pixmap)

错误:

TypeError: bad argument type for built-in operation.

第二次尝试:

result = pixmap.copy(r)
Q_image = QtGui.QPixmap.toImage(result)
qimage = QtGui.QImage(Q_image, Q_image.width, Q_image.height, QtGui.QImage.Format_Grayscale8)
pixmap = QtGui.QPixmap.fromImage(qimage)
self.Changed_view.emit(pixmap)

错误:

TypeError: arguments did not match any overloaded call:   QImage():
too many arguments   QImage(QSize, QImage.Format): argument 1 has
unexpected type 'QImage'   QImage(int, int, QImage.Format): argument 1
has unexpected type 'QImage'   QImage(bytes, int, int, QImage.Format):
argument 1 has unexpected type 'QImage'   QImage(sip.voidptr, int,
int, QImage.Format): argument 1 has unexpected type 'QImage'  
QImage(bytes, int, int, int, QImage.Format): argument 1 has unexpected
type 'QImage'   QImage(sip.voidptr, int, int, int, QImage.Format):
argument 1 has unexpected type 'QImage'   QImage(List[str]): argument
1 has unexpected type 'QImage'   QImage(str, format: str = None):
argument 1 has unexpected type 'QImage'   QImage(QImage): too many
arguments   QImage(Any): too many arguments

您可以使用可以在 QImage 格式之间转换的 convertToFormat()

result = pixmap.copy(r)
Q_image = QtGui.QPixmap.toImage(result)
grayscale = image.convertToFormat(QtGui.QImage.Format_Grayscale8)
pixmap = QtGui.QPixmap.fromImage(grayscale)
self.Changed_view.emit(pixmap)

我不知道第一个错误(没有完整的 Traceback 很难看出问题的根源),但是第二个错误发生是因为您使用了错误的初始化参数:如果您提供一个 QImage 你不能添加其他参数(如上次错误报告)。

        image = cv2.imread('logo.jpg')
        grayFrame = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
        cv2.imwrite("ornek1.jpg", grayFrame)    
        img = QtGui.QImage(self.frame, self.width, self.height, QtGui.QImage.Format_RGB888)
        img = QtGui.QPixmap.fromImage(img)
        pixmap = QPixmap("ornek1.jpg")
        pixmap=pixmap.scaled(240, 240)

        result = QPixmap("ornek1.jpg")
        Q_image = QtGui.QPixmap.toImage(result)
        
        grayscale = Q_image.convertToFormat(QtGui.QImage.Format_Grayscale8)
        pixmap = QtGui.QPixmap.fromImage(grayscale)
        pixmap=pixmap.scaled(240, 240)