问题
I'm trying to convert QPixmap image to grayscale. However, I got an error for all tried solution.
The first try:
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)
Error :
TypeError: bad argument type for built-in operation.
The second try:
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)
Error :
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:
You can use convertToFormat() that can convert between QImage formats.
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)
I don't know about the first error (without the full Traceback it's hard to see what is the source of the problem), but the second one happens because you're using wrong parameters for the initialization: if you provide a QImage you can't add other parameters (as the last error reports).
来源:https://stackoverflow.com/questions/59223743/converting-qpixmap-to-grayscale