将QPixmap转换为灰度

时间:2019-12-07 07:00:00

标签: python python-3.x pyqt pyqt5 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:内置操作的错误参数类型。

第二次尝试:

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

1 个答案:

答案 0 :(得分:0)

您可以使用convertToFormat()来在QImage格式之间进行转换。

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您不能添加其他参数(作为最后的错误报告)。