OpenCV 中的
cv::normalize(_src, dst, 0, 255, NORM_MINMAX, CV_8UC1);
有什么作用?
我浏览了文档,但无法理解
alpha
、beta
、NORM_MINMAX
和 CV_8UC1
的实际用途。我知道 alpha 设定下限,beta 设定上限。 CV_8UC1
代表 8 位无符号单通道。但这些论点到底对这幅画做了什么,是我无法理解的。
当
normType
为 NORM_MINMAX
时,cv::normalize
将 _src
归一化,使得 dst
的最小值为 alpha
,dst
的最大值为 beta
。 cv::normalize
仅使用缩放和移位(即添加常数并乘以常数)即可发挥其魔力。
CV_8UC1
表示 dst
有多少个频道。
这里的文档非常清楚:http://docs.opencv.org/modules/core/doc/operations_on_arrays.html#normalize
import matplotlib.pyplot as plt
import numpy as np
import cv2
# Generate some sample images
image = np.random.randint(0, 256, size=(7, 7), dtype=np.uint8)
print("Original Image:")[enter image description here][1]
print(image)
# Dictionary mapping normalization type constants to their names
norm_type_names = {
cv2.NORM_MINMAX: "NORM_MINMAX",
cv2.NORM_L1: "NORM_L1",
cv2.NORM_L2: "NORM_L2"
}
# Normalize the image using different normalization methods
norm_types = [cv2.NORM_MINMAX, cv2.NORM_L1, cv2.NORM_L2]
norm_images = []
for norm_type in norm_types:
norm_image = cv2.normalize(image, None, alpha=20, beta=50, norm_type=norm_type)
print(f'{norm_type_names[norm_type]}')
print(norm_image)
norm_images.append(norm_image)
print()
# Display the images with pixel values using Matplotlib
fig, axes = plt.subplots(1, len(norm_types), figsize=(10, 10))
for i, norm_image in enumerate(norm_images):
axes[i].imshow(norm_image, cmap='gray')
axes[i].set_title('{}'.format(norm_type_names[norm_types[i]]))
axes[i].axis('off')
# Display pixel values on the normalized images
for y in range(norm_image.shape[0]):
for x in range(norm_image.shape[1]):
axes[i].text(x, y, f'{norm_image[y, x]}', color='red', ha='center', va='center', fontsize=8)
plt.tight_layout()
plt.show()