"""图像预处理""" img = cv2.equalizeHist(img) img = cv2.GaussianBlur(img, (3, 3), 0, 0, cv2.BORDER_DEFAULT)
时间: 2024-06-08 13:07:32 浏览: 152
这段代码是进行图像预处理的操作,主要包括两个步骤:
1. 直方图均衡化(equalizeHist):将图像的灰度值进行均衡化,使得图像的亮度分布更加均匀,增强图像对比度,便于后续的处理和分析。
2. 高斯模糊(GaussianBlur):通过对图像进行高斯平滑处理,可以去除噪声和细节信息,使得图像更加平滑,便于后续的边缘检测、特征提取等操作。其中,(3, 3)表示高斯核的大小,0表示标准差,cv2.BORDER_DEFAULT表示边界填充方式为默认模式。
相关问题
使用 Python 实现对一个灰度图 像数组的处理,包括: 1.显示灰度图像 2.进行图像预处理 3.进行图像二值化 4.计算中线以及偏差,左右边线
在Python中,我们可以使用OpenCV库来处理灰度图像。以下是每个步骤的简单示例:
1. **显示灰度图像**:
```python
import cv2
import numpy as np
# 加载图像,转换为灰度
img = cv2.imread('gray_image.jpg', cv2.IMREAD_GRAYSCALE)
cv2.imshow('Gray Image', img)
cv2.waitKey(0) # 等待用户按键,0表示立即关闭
```
2. **图像预处理**:
- **平滑滤波(如高斯滤波)**:
```python
blur_img = cv2.GaussianBlur(img, (5, 5), 0)
```
- **边缘检测(如Canny)**:
```python
edges = cv2.Canny(blur_img, 50, 150)
```
3. **图像二值化**:
```python
_, binary_img = cv2.threshold(img, 127, 255, cv2.THRESH_BINARY) # 单通道阈值法
```
或者使用Otsu's thresholding:
```python
binary_img = cv2.threshold(img, 0, 255, cv2.THRESH_BINARY_INV + cv2.THRESH_OTSU)[1]
```
4. **计算中线以及偏差**:
对于水平线的检测,可以先找边缘像素,然后遍历找出连续的垂直方向像素序列,确定疑似中线的位置。偏差则可以通过比较两旁像素数目的差异来估算。
```python
def find_lines(binary_img):
lines = cv2.HoughLinesP(binary_img, rho=1, theta=np.pi/180, threshold=50, minLineLength=100, maxLineGap=5)
if lines is not None:
mid_line = None
for line in lines:
x1, y1, x2, y2 = line[0]
if abs(y1-y2) < 10: # 排除近似垂直的直线,可能是噪声
mid_line = (x1+x2)//2, (y1+y2)//2
return mid_line, calculate_deviation(binary_img, mid_line)
else:
return None, 0
# 边距偏差计算函数
def calculate_deviation(binary_img, line):
left_sum, right_sum = 0, 0
for i in range(binary_img.shape[0]):
if i > line[1] and i < binary_img.shape[0]:
if binary_img[i][int(line[0])] == 0:
left_sum += 1
elif binary_img[i][int(line[0]+1)] == 0:
right_sum += 1
return (right_sum - left_sum) / len(line[0])
# 示例调用
mid_line, deviation = find_lines(binary_img)
print(f"Mid-line: {mid_line}, Deviation: {deviation}")
```
opencv 图像预处理
以下是一些常见的图像预处理技术和如何使用OpenCV实现它们的示例:
1. 读取图像
```python
import cv2
# 读取图像
img = cv2.imread('image.jpg')
```
2. 调整图像大小
```python
import cv2
# 读取图像
img = cv2.imread('image.jpg')
# 调整图像大小
resized_img = cv2.resize(img, (new_width, new_height))
```
3. 灰度化
```python
import cv2
# 读取图像
img = cv2.imread('image.jpg')
# 灰度化
gray_img = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
```
4. 图像平滑
```python
import cv2
# 读取图像
img = cv2.imread('image.jpg')
# 图像平滑
blurred_img = cv2.GaussianBlur(img, (kernel_size, kernel_size), 0)
```
5. 边缘检测
```python
import cv2
# 读取图像
img = cv2.imread('image.jpg')
# 灰度化
gray_img = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
# 边缘检测
edges = cv2.Canny(gray_img, threshold1, threshold2)
```
6. 直方图均衡化
```python
import cv2
# 读取图像
img = cv2.imread('image.jpg')
# 灰度化
gray_img = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
# 直方图均衡化
equalized_img = cv2.equalizeHist(gray_img)
```
阅读全文