(minVal, maxVal, minLoc, maxLoc) = cv2.minMaxLoc(gray)
时间: 2023-10-28 19:05:05 浏览: 65
这段代码使用了OpenCV库中的函数cv2.minMaxLoc(),该函数可以找到图像中的最小值、最大值以及它们的位置。具体来说,函数接收一个灰度图像gray作为输入,并返回四个值:最小值minVal、最大值maxVal、最小值的位置minLoc和最大值的位置maxLoc。这些值可以用于进一步的图像处理和分析。
相关问题
import cv2 import matplotlib.pyplot as plt import numpy as np from skimage.measure import label, regionprops file_url = './data/origin/DJI_0081.jpg' output_url = './DJI_0081_ROI.jpg' def show_img(img, title): cv2.namedWindow(title, cv2.WINDOW_NORMAL) cv2.imshow(title, img) def output_img(img, url): cv2.imwrite(url, img, [int(cv2.IMWRITE_PNG_COMPRESSION), 9]) # 使用2g-r-b分离 src = cv2.imread(file_url) show_img(src, 'src') # 转换为浮点数进行计算 fsrc = np.array(src, dtype=np.float32) / 255.0 (b, g, r) = cv2.split(fsrc) gray = 2 * g - 0.9 * b - 1.1 * r # 求取最大值和最小值 (minVal, maxVal, minLoc, maxLoc) = cv2.minMaxLoc(gray) # 转换为u8类型,进行otsu二值化 gray_u8 = np.array((gray - minVal) / (maxVal - minVal) * 255, dtype=np.uint8) (thresh, bin_img) = cv2.threshold(gray_u8, -1.0, 255, cv2.THRESH_OTSU) show_img(bin_img, 'bin_img') def find_max_connected_component(binary_img): # 输出二值图像中所有的连通域 img_label, num = label(binary_img, connectivity=1, background=0, return_num=True) # connectivity=1--4 connectivity=2--8 # print('+++', num, img_label) # 输出连通域的属性,包括面积等 props = regionprops(img_label) resMatrix = np.zeros(img_label.shape).astype(np.uint8) # 只保留最大的连通域 max_area = 0 max_index = 0 for i in range(0, len(props)): if props[i].area > max_area: max_area = props[i].area max_index = i tmp = (img_label == max_index + 1).astype(np.uint8) resMatrix += tmp resMatrix *= 255 return resMatrix bin_img = find_max_connected_component(bin_img) show_img(bin_img, 'bin_img') # 得到彩色的图像 (b8, g8, r8) = cv2.split(src) color_img = cv2.merge([b8 & bin_img, g8 & bin_img, r8 & bin_img]) output_img(color_img, output_url) show_img(color_img, 'color_img') cv2.waitKey() cv2.destroyAllWindows()
这段代码是用来对一张图片进行处理,找到图片中最大的连通域,并将其保留下来。具体的处理过程如下:
1.读入图片并显示;
2.将图片转换成浮点数类型,方便做计算;
3.使用2g-r-b分离,得到灰度图像;
4.使用minMaxLoc函数找到灰度图像中的最大值和最小值;
5.将灰度图像转换成u8类型,方便做Otsu二值化;
6.使用Otsu二值化将图像进行二值化处理;
7.找到图像中最大的连通域;
8.将连通域保留下来,并输出彩色图像。
需要注意的是,代码中使用了一些第三方库,比如OpenCV和skimage,需要提前安装好。另外,代码中也有一些常量的设置,比如阈值等,可以根据具体需求进行调整。
将cv2.matchTemplate封装为新的函数,使其具有旋转和尺度适应性,然后在图像中找出该模板,进行标记,写出代码
以下是将cv2.matchTemplate封装为新的函数,使其具有旋转和尺度适应性,并在图像中找出该模板进行标记的Python代码示例:
```python
import cv2
import numpy as np
def matchTemplateRotatedScaled(img, template, angle, scale):
# 缩放模板图像
resized_template = cv2.resize(template, None, fx=scale, fy=scale, interpolation=cv2.INTER_AREA)
# 旋转模板图像
(h, w) = resized_template.shape[:2]
center = (w // 2, h // 2)
M = cv2.getRotationMatrix2D(center, angle, 1.0)
rotated_template = cv2.warpAffine(resized_template, M, (w, h))
# 进行模板匹配
result = cv2.matchTemplate(img, rotated_template, cv2.TM_CCOEFF_NORMED)
# 找到最佳匹配位置
(minVal, maxVal, minLoc, maxLoc) = cv2.minMaxLoc(result)
(topLeft, bottomRight) = (maxLoc, (maxLoc[0] + w, maxLoc[1] + h))
# 返回最佳匹配位置和匹配度
return (topLeft, bottomRight, maxVal)
# 读取原始图像和模板图像
img = cv2.imread('image.jpg')
template = cv2.imread('template.jpg')
# 转换为灰度图像
gray_img = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
gray_template = cv2.cvtColor(template, cv2.COLOR_BGR2GRAY)
# 设置旋转角度和缩放系数范围
angles = range(-45, 46, 5)
scales = np.arange(0.1, 2.1, 0.1)
# 遍历所有旋转角度和缩放系数,找到最佳匹配
maxVal = -1
for angle in angles:
for scale in scales:
(topLeft, bottomRight, val) = matchTemplateRotatedScaled(gray_img, gray_template, angle, scale)
if val > maxVal:
maxVal = val
bestAngle = angle
bestScale = scale
bestTopLeft = topLeft
bestBottomRight = bottomRight
# 在原始图像中标记最佳匹配位置
cv2.rectangle(img, bestTopLeft, bestBottomRight, (0, 255, 0), 2)
# 显示结果
cv2.imshow("Image", img)
cv2.waitKey(0)
cv2.destroyAllWindows()
```
在上述代码中,我们首先读取原始图像和模板图像,并将它们转换为灰度图像。然后定义旋转角度和缩放系数的范围,并遍历所有可能的组合,找到最佳匹配。最后在原始图像中标记最佳匹配位置,并显示结果。
相关推荐
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)