欢迎访问宙启技术站
智能推送

PyQt5.QtGui.QImage实现图像的灰度化与二值化

发布时间:2024-01-13 06:25:43

PyQt5是一个用于创建图形用户界面的Python库。其中的QtGui模块提供了许多用于处理图像的类和函数。其中,QImage类是一个用于处理图像的主要类。

实现图像的灰度化可以将彩色图像转为黑白灰度图像。一种常见的灰度化方法是将RGB三个分量的值进行加权平均。例如,可以使用公式:Gray = 0.299 * R + 0.587 * G + 0.114 * B 来计算每个像素的灰度值。

实现图像的二值化可以根据一定的阈值将灰度图像转为黑白二值图像。一种简单的二值化方法是将灰度值大于阈值的像素设为255(白色),灰度值小于等于阈值的像素设为0(黑色)。

下面是一个使用PyQt5实现图像灰度化与二值化的例子:

from PyQt5 import QtWidgets, QtGui
from PyQt5.QtCore import Qt

class ImageViewer(QtWidgets.QMainWindow):
    def __init__(self):
        super().__init__()
        
        self.setWindowTitle("ImageViewer")
        
        self.image_label = QtWidgets.QLabel()
        self.setCentralWidget(self.image_label)
        
        self.load_image("path/to/image.jpg")  # 加载图片
        
        self.process_image()  # 处理图片
        
        self.show()  # 显示界面

    def load_image(self, path):
        image = QtGui.QImage(path)
        self.image = image.convertToFormat(QtGui.QImage.Format_RGB888)

    def process_image(self):
        gray_image = self.image.convertToFormat(QtGui.QImage.Format_Grayscale8)  # 灰度化
        binary_image = self.gray_to_binary(gray_image, 128)  # 二值化
        
        pixmap = QtGui.QPixmap.fromImage(binary_image)
        self.image_label.setPixmap(pixmap)
        
    def gray_to_binary(self, image, threshold):
        binary_image = QtGui.QImage(image.width(), image.height(), image.format())
        
        for y in range(image.height()):
            for x in range(image.width()):
                gray = image.pixelColor(x, y).red()
                
                if gray > threshold:
                    binary_image.setPixelColor(x, y, QtGui.QColor(Qt.white))
                else:
                    binary_image.setPixelColor(x, y, QtGui.QColor(Qt.black))
                    
        return binary_image
        
if __name__ == "__main__":
    app = QtWidgets.QApplication([])
    window = ImageViewer()
    app.exec_()

上述代码创建了一个ImageViewer类,继承自QtWidgets.QMainWindow。在__init__方法中,创建了一个QLabel用于显示图像,加载图片,处理图片,并最终显示界面。

load_image方法用于加载图片。首先使用QtGui.QImage(path)创建一个QImage对象,然后使用convertToFormat方法将图像格式转为RGB888格式。

process_image方法用于处理图像。首先将RGB图像转为灰度图像,然后调用gray_to_binary方法进行二值化,将灰度图像转为二值图像。最后将二值图像转为QPixmap,并设置给QLabel。

gray_to_binary方法用于进行二值化处理。首先创建一个和原图像大小相同的QImage对象,然后遍历每个像素,计算灰度值并与阈值进行比较,根据比较结果设置二值图像的像素颜色。

以上是一个简单的使用PyQt5实现图像灰度化与二值化的例子。你可以根据实际需求进行修改和扩展。