cv2.minMaxLoc()函数

在有些现实场景中,咱们须要去使用算法自动的寻找到图片中的最亮的区域,这个区域是咱们感兴趣的目标所在的位置,比较典型的是一个应用是视网膜图像,图像中视网膜所在的位置比较亮,而其它地方比较暗,咱们更加关注视网膜所在的区域,于是须要使用算法自动的寻找到这个区域,而后针对这个区域进行处理和分析。

要检测出图像中最亮的区域,咱们能够直接使用opencv中自带的函数(minVal, maxVal, minLoc, maxLoc) = cv2.minMaxLoc(gray),该函数是用来获取图像中的最大值和最小值 所在的位置,而图像中的最大值其实就是最亮的像素点,图像中的最小值其实就是最暗的像素点,该函数的输入参数是一张灰度图像,该函数会返回最大值、最小值、最大值所在位置和最小值所在位置等,咱们能够根据得到的位置信息绘制结果。
(minVal,maxVal,minLoc,maxLoc)=cv2.minMaxLoc(gray,mask=None)

参数:
gray: 输入的灰度图像或单通道图像。
mask:掩膜

返回值:
(minVal, maxVal, minLoc, maxLoc): 四元组,图像中的最小值、最大值、最小值、最大值所在的位置,其中位置是一个二元组(x,y)
示例:

点击查看代码
import numpy as np
import cv2
import numpy as np
img=cv2.imread('D:/pic/0207/0429/01.png',cv2.IMREAD_UNCHANGED)
cv2.imshow('original',img)
img_gray=cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
ret,thresh=cv2.threshold(img_gray,50,255,cv2.THRESH_BINARY)
contours,hiearchy=cv2.findContours(thresh,cv2.RETR_LIST,cv2.CHAIN_APPROX_SIMPLE)
cnt=contours[0]
mask1=np.zeros(img_gray.shape,np.uint8)
mask1=cv2.drawContours(mask1,[cnt],-1,255,-1)
meanVal=cv2.mean(img,mask=mask1)
print("meanVal:",meanVal)
# 需要注意函数 minMaxLoc 处理的对象为灰度图像,
# 提取gray图中特定的mask区域的部分,计算这个区域部分的 最小值和最大值以及相应的位置
minVal,maxVal,minLoc,maxLoc = cv2.minMaxLoc(img_gray,mask=mask1)
print("minVal=",minVal)
print("maxVal=",maxVal)
print("minLoc=",minLoc)
print("maxLoc=",maxLoc)
# 使用掩码获取感兴趣的区域并显示
mask2 = np.zeros(img.shape,np.uint8)
mask2 = cv2.drawContours(mask2,[cnt],-1,(255,255,255),-1) #实心区域显示
# mask与原图 按位相与,获取相应区域的图像区域
loc = cv2.bitwise_and(img,mask2)
cv2.imshow("after o1",img)
cv2.imshow("mask1",mask1)
cv2.imshow("mask2",mask2)
cv2.imshow("loc",loc)
cv2.imshow("gray",img_gray)
cv2.waitKey()
cv2.destroyAllWindows()
posted @ 2024-04-29 16:33  阳光天气  阅读(9)  评论(0编辑  收藏  举报