gray = cv2.normalize(matrix, None, 0, 255, cv2.NORM_MINMAX, cv2.CV_8U)解释
时间: 2024-04-02 12:32:56 浏览: 43
`cv2.normalize()` 是 OpenCV 库中的一个函数,用于将输入矩阵进行归一化操作。该函数的参数如下:
- `src`: 输入矩阵
- `dst`: 输出矩阵,如果为 `None`,则会创建一个和输入矩阵大小相同的输出矩阵
- `alpha`: 归一化范围的下限
- `beta`: 归一化范围的上限
- `norm_type`: 归一化的类型,可以是以下几种之一:
- `cv2.NORM_INF`: 最大值归一化
- `cv2.NORM_L1`: 求绝对值和后进行归一化
- `cv2.NORM_L2`: 求平方和后进行归一化
- `cv2.NORM_MINMAX`: 最小值和最大值归一化
- `dtype`: 输出矩阵的数据类型
在这里,我们使用了 `cv2.NORM_MINMAX` 归一化类型,将矩阵中的最小值归一化为 0,最大值归一化为 255,输出矩阵的数据类型为 `cv2.CV_8U`,即 8 位无符号整数。这样就将矩阵转换为了灰度图像。
相关问题
修改程序with open('point.txt', 'r') as f: lines = f.readlines() matrix = np.zeros((m, n)) for line in lines: values = line.split() i = int((int(float(values[0])) - col1_min) / avg_interval_dx) j = int((int(float(values[1])) - col2_min) / (avg_interval_dy * 3)) matrix[i, j] = float(values[2]),将矩阵转换为灰度图像,并作膨胀运算
可以使用OpenCV库将矩阵转换为灰度图像,并对图像进行膨胀运算。以下是修改后的代码:
```
import cv2
import numpy as np
with open('point.txt', 'r') as f:
lines = f.readlines()
matrix = np.zeros((m, n))
for line in lines:
values = line.split()
i = int((int(float(values[0])) - col1_min) / avg_interval_dx)
j = int((int(float(values[1])) - col2_min) / (avg_interval_dy * 3))
matrix[i, j] = float(values[2])
# 将矩阵转换为灰度图像
gray = cv2.normalize(matrix, None, 0, 255, cv2.NORM_MINMAX, cv2.CV_8U)
# 进行膨胀运算
kernel = np.ones((5, 5), np.uint8)
dilation = cv2.dilate(gray, kernel, iterations=1)
# 显示膨胀后的图像
cv2.imshow('Dilation', dilation)
cv2.waitKey(0)
cv2.destroyAllWindows()
```
用python实现基于概率分布的超声图像与自然图像性质差异分析这一课题,使用opencv,两种图像的文件类型都是jpg,超声图像的文件路径是‘D:\zzz\zus2’,自然图像的文件路径是‘D:\zzz\zna2’,两种图像都有84张,需要对比两种图像的特征必须有颜色,纹理,形状,差异性分析方法也需要多种,包括完整详细代码
以下是用Python实现基于概率分布的超声图像与自然图像性质差异分析的代码:
```python
import cv2
import numpy as np
import matplotlib.pyplot as plt
# 定义颜色直方图函数
def color_histogram(img):
hsv = cv2.cvtColor(img, cv2.COLOR_BGR2HSV)
h, s, v = cv2.split(hsv)
hist = cv2.calcHist([hsv], [0, 1], None, [180, 256], [0, 180, 0, 256])
cv2.normalize(hist, hist, 0, 255, cv2.NORM_MINMAX)
return hist.flatten()
# 定义纹理特征函数
def texture_feature(img):
img_gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
# 计算LBP特征
radius = 1
n_points = 8 * radius
lbp = np.zeros(img_gray.shape, dtype=np.uint8)
for i in range(radius, img_gray.shape[0] - radius):
for j in range(radius, img_gray.shape[1] - radius):
center_pixel = img_gray[i, j]
values = []
for k in range(n_points):
x = i + int(radius * np.cos(2 * np.pi * k / n_points))
y = j - int(radius * np.sin(2 * np.pi * k / n_points))
values.append(img_gray[x, y])
values = np.array(values)
lbp_value = (values >= center_pixel) * 1
lbp_value = np.packbits(lbp_value)
lbp[i, j] = lbp_value
# 计算LBP直方图
hist = cv2.calcHist([lbp], [0], None, [256], [0, 256])
cv2.normalize(hist, hist, 0, 255, cv2.NORM_MINMAX)
return hist.flatten()
# 定义形状特征函数
def shape_feature(img):
contours, hierarchy = cv2.findContours(cv2.cvtColor(img, cv2.COLOR_BGR2GRAY), cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE)
contour = contours[0]
# 计算图像轮廓面积和周长
area = cv2.contourArea(contour)
perimeter = cv2.arcLength(contour, True)
# 计算图像形状特征
circularity = 4 * np.pi * area / (perimeter ** 2)
compactness = (perimeter ** 2) / area
return [circularity, compactness]
# 定义差异性分析函数
def difference_analysis(img1, img2):
# 计算颜色直方图特征
hist1, hist2 = color_histogram(img1), color_histogram(img2)
color_similarity = cv2.compareHist(hist1, hist2, cv2.HISTCMP_CORREL)
# 计算纹理特征
texture1, texture2 = texture_feature(img1), texture_feature(img2)
texture_similarity = cv2.compareHist(texture1, texture2, cv2.HISTCMP_CORREL)
# 计算形状特征
shape1, shape2 = shape_feature(img1), shape_feature(img2)
circularity_similarity = abs(shape1[0] - shape2[0])
compactness_similarity = abs(shape1[1] - shape2[1])
# 计算总体相似度
similarity = (color_similarity + texture_similarity + circularity_similarity + compactness_similarity) / 4
return similarity
# 读取图像文件夹,并计算每张图像的特征
zus2_folder = 'D:/zzz/zus2'
zna2_folder = 'D:/zzz/zna2'
zus2_images = []
zna2_images = []
zus2_features = []
zna2_features = []
for i in range(84):
img = cv2.imread(zus2_folder + '/{}.jpg'.format(i+1))
zus2_images.append(img)
zus2_features.append([color_histogram(img), texture_feature(img), shape_feature(img)])
img = cv2.imread(zna2_folder + '/{}.jpg'.format(i+1))
zna2_images.append(img)
zna2_features.append([color_histogram(img), texture_feature(img), shape_feature(img)])
# 计算两种图像之间的差异性
similarity_matrix = np.zeros((84, 84))
for i in range(84):
for j in range(84):
similarity_matrix[i, j] = difference_analysis(zus2_images[i], zna2_images[j])
# 可视化差异性矩阵
plt.imshow(similarity_matrix, cmap='gray')
plt.show()
```
该代码首先定义了三个特征函数,分别用于计算颜色直方图、纹理和形状特征。然后定义了一个差异性分析函数,用于计算两张图像之间的相似度(相似度越高,差异性越小)。最后读取了两个文件夹中的所有图像文件,并计算每张图像的特征。然后计算了所有图像之间的差异性,并将结果可视化为一个灰度图像。在这个图像中,越接近黑色的像素代表两张图像之间的差异性越小,越接近白色的像素代表两张图像之间的差异性越大。可以通过观察这个图像来比较超声图像和自然图像的差异性。
阅读全文