如何用cv2将两张图片不一样的地方涂白
时间: 2024-03-23 07:43:29 浏览: 162
可以使用以下步骤将两张图片不一样的地方涂白:
1. 使用cv2读取两张图片。
2. 将两张图片转换为灰度图像。
3. 使用cv2.absdiff函数计算两张灰度图像的差异图像。
4. 对差异图像进行二值化,将差异较大的区域变成白色。可以使用cv2.threshold函数实现二值化。
5. 将二值化后的差异图像与原始图像进行按位与运算,将差异区域涂白。
下面是一个示例代码:
``` python
import cv2
# 读取两张图像
img1 = cv2.imread('image1.jpg')
img2 = cv2.imread('image2.jpg')
# 将图像转换为灰度图像
gray1 = cv2.cvtColor(img1, cv2.COLOR_BGR2GRAY)
gray2 = cv2.cvtColor(img2, cv2.COLOR_BGR2GRAY)
# 计算差异图像
diff = cv2.absdiff(gray1, gray2)
# 二值化差异图像
_, thresh = cv2.threshold(diff, 50, 255, cv2.THRESH_BINARY)
# 将差异区域涂白
result = cv2.bitwise_and(img1, img1, mask=thresh)
# 显示结果
cv2.imshow('Result', result)
cv2.waitKey(0)
cv2.destroyAllWindows()
```
这样,就可以将两张图片不一样的地方涂白。
相关问题
cv2 单通道怎么涂白
可以使用numpy库中的ones函数创建一个与单通道图像大小相同的全1数组,然后将其乘以255,即可得到一个全白的单通道图像。具体代码如下所示:
```python
import cv2
import numpy as np
# 读取单通道图像
img = cv2.imread('gray.jpg', 0)
# 创建全1数组并乘以255
white = np.ones_like(img) * 255
# 显示全白的单通道图像
cv2.imshow('white', white)
cv2.waitKey(0)
cv2.destroyAllWindows()
```
其中,gray.jpg是一个单通道的灰度图像,可以根据实际情况替换为其他单通道图像。
在qgraphicsview上用drawpoints全部涂白之后如何保存
在Qt中,可以通过QPixmap类来保存QGraphicsView上的绘图内容。具体步骤如下:
1. 使用QPixmap的grabWidget方法将QGraphicsView上的绘图内容转换为QImage对象。
```cpp
QPixmap pixmap = QPixmap::grabWidget(ui->graphicsView, ui->graphicsView->rect());
QImage image = pixmap.toImage();
```
2. 将QImage对象涂白。
```cpp
image.fill(Qt::white);
```
3. 将QImage对象保存为图片文件。
```cpp
image.save("image.png");
```
完整的代码示例:
```cpp
#include <QApplication>
#include <QGraphicsScene>
#include <QGraphicsView>
#include <QGraphicsEllipseItem>
#include <QPixmap>
int main(int argc, char *argv[])
{
QApplication app(argc, argv);
QGraphicsScene scene;
QGraphicsView view(&scene);
// 绘制点
for (int i = 0; i < 10; i++) {
QGraphicsEllipseItem *item = new QGraphicsEllipseItem(i*10, i*10, 10, 10);
scene.addItem(item);
}
// 保存图片
QPixmap pixmap = QPixmap::grabWidget(&view, view.rect());
QImage image = pixmap.toImage();
image.fill(Qt::white);
image.save("image.png");
return app.exec();
}
```
注意,在使用QPixmap的grabWidget方法时,需要传入QGraphicsView的rect()作为参数,以获取QGraphicsView上的绘图内容。保存图片时,需要指定保存的文件名及文件格式。涂白时,需要使用QImage的fill方法,并将其传入Qt::white参数。
阅读全文