qpixmap显示图片黑白?
时间: 2023-11-09 19:59:06 浏览: 150
可以使用QImage的convertToFormat方法将彩色图片转换为灰度图片,然后再使用QPixmap显示。下面是示例代码:
```
QImage image("path/to/image");
QImage grayImage = image.convertToFormat(QImage::Format_Grayscale8);
QPixmap pixmap = QPixmap::fromImage(grayImage);
```
相关问题
qt 如何把QLabel里的图片改成黑白色?
要将 QLabel 中显示的图片转换为黑白色,你可以使用 QImage 的 convertToFormat() 方法将图像转换为灰度图像,然后将其设置为 QLabel 的图像。
以下是一个示例代码,演示了如何将 QLabel 中显示的图片转换为黑白色:
```cpp
#include <QApplication>
#include <QLabel>
#include <QImage>
int main(int argc, char *argv[])
{
QApplication app(argc, argv);
QLabel label;
QImage image(":/path/to/your/image"); // 使用资源文件路径或实际文件路径
// 将图像转换为灰度图像
QImage grayImage = image.convertToFormat(QImage::Format_Grayscale8);
// 设置 QLabel 的图像为黑白图像
label.setPixmap(QPixmap::fromImage(grayImage));
label.show();
return app.exec();
}
```
在上面的代码中,你需要将 `:/path/to/your/image` 替换为你自己的图像资源路径或实际图像文件路径。然后,使用 `QImage::convertToFormat()` 方法将图像转换为灰度图像,使用 `QPixmap::fromImage()` 方法创建包含转换后图像的 QPixmap 对象,最后使用 `QLabel::setPixmap()` 方法设置 QLabel 的图像为黑白图像。
希望这对你有帮助!如果还有其他问题,请随时问。
利用python设计并实现一款简单的P图软件,能够具备一些常用的P图功能。 要求完成以下工作: 1、图形界面 设计一个简单的图形界面,主要包含三个部分:上传图片部分,P图部分,保存结果部分。 2、上传图片/保存结果 通过控件控制,上传本地文件并在图形界面中显示;通过控件控制,将P好的图下载保存在本地。要有两个图像p图前后对比 3、P图功能 具备一些常用的P图功能例如彩色图像转黑白图像,明暗亮度变化,反色处理,磨皮,生成素描等。每个功能对应一个按钮,具体功能不要用PIL包中函数实现,要利用数字图像算法实现
好的,我可以为您提供一些Python代码实现这个P图软件的功能。不过请注意,这只是一个简单的示例,可能还需要进行一些优化和改进。
首先,我们需要安装PyQt5库,用于创建图形界面。您可以使用以下命令在命令行中安装:
```
pip install PyQt5
```
接下来,我们需要导入必要的库和模块:
```
import sys
from PyQt5.QtWidgets import QApplication, QWidget, QLabel, QPushButton, QFileDialog
from PyQt5.QtGui import QPixmap
import numpy as np
import cv2
```
然后,我们可以创建一个名为P图软件的窗口,并在窗口中添加三个部分:上传图片部分、P图部分和保存结果部分。
```
class P图软件(QWidget):
def __init__(self):
super().__init__()
self.initUI()
def initUI(self):
# 创建上传图片部分
self.upload_label = QLabel('上传图片', self)
self.upload_label.setGeometry(50, 50, 100, 20)
self.upload_button = QPushButton('上传', self)
self.upload_button.setGeometry(50, 80, 100, 30)
self.upload_button.clicked.connect(self.upload_image)
self.before_label = QLabel('P图前', self)
self.before_label.setGeometry(50, 120, 100, 20)
self.before_image = QLabel(self)
self.before_image.setGeometry(50, 150, 320, 240)
# 创建P图部分
self.p_label = QLabel('P图', self)
self.p_label.setGeometry(420, 50, 100, 20)
self.gray_button = QPushButton('转黑白', self)
self.gray_button.setGeometry(420, 80, 100, 30)
self.gray_button.clicked.connect(self.convert_gray)
self.bright_button = QPushButton('亮度调整', self)
self.bright_button.setGeometry(420, 120, 100, 30)
self.bright_button.clicked.connect(self.adjust_brightness)
self.invert_button = QPushButton('反色处理', self)
self.invert_button.setGeometry(420, 160, 100, 30)
self.invert_button.clicked.connect(self.invert_colors)
self.blur_button = QPushButton('磨皮', self)
self.blur_button.setGeometry(420, 200, 100, 30)
self.blur_button.clicked.connect(self.blur_image)
self.sketch_button = QPushButton('生成素描', self)
self.sketch_button.setGeometry(420, 240, 100, 30)
self.sketch_button.clicked.connect(self.sketch_image)
self.after_label = QLabel('P图后', self)
self.after_label.setGeometry(420, 280, 100, 20)
self.after_image = QLabel(self)
self.after_image.setGeometry(420, 310, 320, 240)
# 创建保存结果部分
self.save_label = QLabel('保存结果', self)
self.save_label.setGeometry(50, 400, 100, 20)
self.save_button = QPushButton('保存', self)
self.save_button.setGeometry(50, 430, 100, 30)
self.save_button.clicked.connect(self.save_image)
self.show()
def upload_image(self):
# 选择本地图片文件
filename, _ = QFileDialog.getOpenFileName(self, '选择图片', '.', 'Image files(*.jpg *.png *.jpeg)')
if filename != '':
# 在图形界面中显示图片
pixmap = QPixmap(filename)
self.before_image.setPixmap(pixmap)
self.before_image.setScaledContents(True)
self.after_image.clear()
def convert_gray(self):
# 将彩色图像转为灰度图像
pixmap = self.before_image.pixmap()
image = pixmap.toImage()
cv_image = np.zeros((image.height(), image.width(), 3), dtype=np.uint8)
for row in range(image.height()):
for col in range(image.width()):
r, g, b, _ = image.pixelColor(col, row).getRgb()
cv_image[row, col] = [r, g, b]
gray_image = cv2.cvtColor(cv_image, cv2.COLOR_BGR2GRAY)
gray_pixmap = QPixmap.fromImage(QPixmap.fromImage(QImage(gray_image.data, gray_image.shape[1], gray_image.shape[0], QImage.Format_Grayscale8)))
self.after_image.setPixmap(gray_pixmap)
self.after_image.setScaledContents(True)
def adjust_brightness(self):
# 调整图像亮度
pixmap = self.before_image.pixmap()
image = pixmap.toImage()
cv_image = np.zeros((image.height(), image.width(), 3), dtype=np.uint8)
for row in range(image.height()):
for col in range(image.width()):
r, g, b, _ = image.pixelColor(col, row).getRgb()
cv_image[row, col] = [r, g, b]
hsv_image = cv2.cvtColor(cv_image, cv2.COLOR_BGR2HSV)
h, s, v = cv2.split(hsv_image)
v = cv2.add(v, 50)
hsv_image = cv2.merge((h, s, v))
bright_image = cv2.cvtColor(hsv_image, cv2.COLOR_HSV2BGR)
bright_pixmap = QPixmap.fromImage(QPixmap.fromImage(QImage(bright_image.data, bright_image.shape[1], bright_image.shape[0], QImage.Format_RGB888)))
self.after_image.setPixmap(bright_pixmap)
self.after_image.setScaledContents(True)
def invert_colors(self):
# 反色处理
pixmap = self.before_image.pixmap()
image = pixmap.toImage()
cv_image = np.zeros((image.height(), image.width(), 3), dtype=np.uint8)
for row in range(image.height()):
for col in range(image.width()):
r, g, b, _ = image.pixelColor(col, row).getRgb()
cv_image[row, col] = [r, g, b]
invert_image = cv2.bitwise_not(cv_image)
invert_pixmap = QPixmap.fromImage(QPixmap.fromImage(QImage(invert_image.data, invert_image.shape[1], invert_image.shape[0], QImage.Format_RGB888)))
self.after_image.setPixmap(invert_pixmap)
self.after_image.setScaledContents(True)
def blur_image(self):
# 磨皮
pixmap = self.before_image.pixmap()
image = pixmap.toImage()
cv_image = np.zeros((image.height(), image.width(), 3), dtype=np.uint8)
for row in range(image.height()):
for col in range(image.width()):
r, g, b, _ = image.pixelColor(col, row).getRgb()
cv_image[row, col] = [r, g, b]
blur_image = cv2.GaussianBlur(cv_image, (5, 5), 0)
blur_pixmap = QPixmap.fromImage(QPixmap.fromImage(QImage(blur_image.data, blur_image.shape[1], blur_image.shape[0], QImage.Format_RGB888)))
self.after_image.setPixmap(blur_pixmap)
self.after_image.setScaledContents(True)
def sketch_image(self):
# 生成素描
pixmap = self.before_image.pixmap()
image = pixmap.toImage()
cv_image = np.zeros((image.height(), image.width(), 3), dtype=np.uint8)
for row in range(image.height()):
for col in range(image.width()):
r, g, b, _ = image.pixelColor(col, row).getRgb()
cv_image[row, col] = [r, g, b]
gray_image = cv2.cvtColor(cv_image, cv2.COLOR_BGR2GRAY)
blur_image = cv2.GaussianBlur(gray_image, (5, 5), 0)
edge_image = cv2.Canny(blur_image, 30, 150)
invert_edge = cv2.bitwise_not(edge_image)
sketch_image = cv2.cvtColor(invert_edge, cv2.COLOR_GRAY2BGR)
sketch_pixmap = QPixmap.fromImage(QPixmap.fromImage(QImage(sketch_image.data, sketch_image.shape[1], sketch_image.shape[0], QImage.Format_RGB888)))
self.after_image.setPixmap(sketch_pixmap)
self.after_image.setScaledContents(True)
def save_image(self):
# 保存P图结果
if not self.after_image.pixmap():
return
filename, _ = QFileDialog.getSaveFileName(self, '保存图片', '.', 'Image files(*.jpg *.png *.jpeg)')
if filename != '':
pixmap = self.after_image.pixmap()
pixmap.save(filename)
if __name__ == '__main__':
app = QApplication(sys.argv)
ex = P图软件()
sys.exit(app.exec_())
```
在代码中,我们使用了一些数字图像算法来实现常用的P图功能,例如将彩色图像转为灰度图像、调整图像亮度、反色处理、磨皮和生成素描等。每个功能对应一个按钮,当用户单击按钮时,就会执行对应的算法,并在图形界面中显示P图结果。
最后,我们使用`QFileDialog`来选择本地图片文件和保存文件,并将P图前后的结果进行对比。当用户单击保存按钮时,就会将P图结果保存到本地。
这是一个简单的P图软件示例,您可以根据自己的需求进行修改和优化。
阅读全文