请介绍下cv2.THRESH_TRUNC好吗?
时间: 2023-02-10 19:21:22 浏览: 91
cv2.THRESH_TRUNC是一种二值化方法,它会将原图像中所有大于阈值的像素都设置为阈值。这意味着,对于大于阈值的像素,它们的灰度值不会发生变化,而对于小于阈值的像素,它们的灰度值不会改变。这种方法通常用于去除噪声或提取图像中的某些细节。
相关问题
""" Author:XiaoMa date:2021/11/2 """ import cv2 import numpy as np import matplotlib.pyplot as plt img0 = cv2.imread("E:\putout\scene00001.png") img1 = cv2.resize(img0, dsize=None, fx=1, fy=1) img2 = cv2.cvtColor(img1, cv2.COLOR_BGR2GRAY) h, w = img1.shape[:2] print(h, w) cv2.namedWindow("W0") cv2.imshow("W0", img2) cv2.waitKey(delay=0) # 图像进行二值化 ##第一种阈值类型 ret0, img3 = cv2.threshold(img2, 127, 255, cv2.THRESH_BINARY) print(ret0) ##第二种阈值类型 ret1, img4 = cv2.threshold(img2, 127, 255, cv2.THRESH_BINARY_INV) print(ret1) ##第三种阈值类型 ret2, img5 = cv2.threshold(img2, 127, 255, cv2.THRESH_TRUNC) print(ret2) ##第四种阈值类型 ret3, img6 = cv2.threshold(img2, 127, 255, cv2.THRESH_TOZERO) print(ret3) ##第五种阈值类型 ret4, img7 = cv2.threshold(img2, 127, 255, cv2.THRESH_TOZERO) print(ret4) # 将所有阈值类型得到的图像绘制到同一张图中 plt.rcParams['font.family'] = 'SimHei' # 将全局中文字体改为黑体 figure = [img3] title = ret0["原图", "第一种阈值类型", "第二种阈值类型", "第三种阈值类型", "第四种阈值类型", "第五种阈值类型"] for i in range(6): figure[i] = cv2.cvtColor(figure[i], cv2.COLOR_BGR2RGB) # 转化图像通道顺序,这一个步骤要记得 plt.subplot(3, 2, i + 1) plt.imshow(figure[i]) plt.title(title[i]) # 添加标题 plt.savefig("E:\putout") 这串代码哪里有问题
这段代码使用Python中的OpenCV库及其相关函数导入一张本地图片,进行了缩放、颜色空间转换等操作。其中,cv2.imread()函数读取位于本地路径"E:\putout\scene00001.png"的图片,cv2.resize()对图片进行了大小重置,而cv2.cvtColor()则将图片从BGR颜色空间转换为灰度颜色空间。最后,使用cv2.namedWindow()和cv2.imshow()将转换后的图片显示出来。
cv::Mat binary; cv::threshold(img, binary, 0, 255, cv::THRESH_BINARY_INV | cv::THRESH_OTSU);
这段代码是C++(OpenCV库)中对图像处理的操作示例。具体来说:
### `cv::Mat binary;`
这创建了一个名为`binary`的新`cv::Mat`矩阵实例,用于存储二进制图像结果。
### `cv::threshold(img, binary, 0, 255, cv::THRESH_BINARY_INV | cv::THRESH_OTSU);`
这是一个执行阈值操作的过程,主要涉及到以下几个参数:
- **img**:输入图像矩阵,即原始图像。
- **binary**:输出矩阵,这里就是处理后的二进制图像。
- **0**:阈值T。当像素值小于此值时,像素会被设置为0;当像素值大于等于此值时,像素会被设置为255。在这里,初始阈值设为0意味着低于该阈值的所有像素都将被设置为0,高于或等于该阈值的像素将被设置为255。这是`cv::THRESH_BINARY_INV`标志的作用之一。
- **255**:当像素值大于等于这个值时,像素会被设置为255。这里是最高可设置的值。
- **cv::THRESH_BINARY_INV | cv::THRESH_OTSU**:这两个标志组合起来表示:
- **cv::THRESH_BINARY_INV**:表示使用逆向二进制阈值,即将原图中小于阈值的区域变为白色(255),大于或等于阈值的区域变为黑色(0)。这里的应用是在原始图像上先应用了逆向二进制操作。
- **cv::THRESH_OTSU**:自动确定最佳阈值的方法。OpenCV会基于直方图分析来找到使得图像黑白分割最清晰的最佳阈值(最大类间方差)。因此,在这种情况下,Otsu算法将决定阈值应该设置为多少以获得最好的二进制图像效果。
整个过程的目标是根据输入图像创建一个二进制版本的图像,其中亮区为纯白,暗区为纯黑,通过自动化阈值确定实现对比度增强和噪声去除。
---
### 相关问题:
1. 如何理解并配置不同的阈值运算符(如THRESH_BINARY、THRESH_BINARY_INV、THRESH_TRUNC、THRESH_TOZERO、THRESH_TOZERO_INV)?
2. Otsu's thresholding算法是如何工作的?它与手动选择阈值有何不同?
3. OpenCV中的`cv::Mat`是什么?它在图像处理中有什么作用?
阅读全文