opencv(39) 图像轮廓之八:minMaxLoc、findNonZero、mean

1 cv2.minMaxLoc()函数

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

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

函数原型:

(minVal,maxVal,minLoc,maxLoc)=cv2.minMaxLoc(gray,mask=None)

参数:

  1. gray 输入的灰度图像或单通道图像。
  2. mask:掩膜

返回值

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

2 cv2.findNonZero() 获取一个图像内的轮廓点位置

函数用于获取一个图像内的轮廓点位置

函数原型:

idx=cv2.findNonZero(src,idx=none)

参数:

  1. src 查找非零元素的图像。

返回值

  1. idx: 二元组,表示非0元素的索引位置。具体格式为(x,y)

3 cv2.mean() 图像的平均颜色和平均灰度

函数用于获取一个图像内的轮廓点位置

函数原型:

mean=cv2.mean(src,mask=none)

参数:

  1. src 输入的灰度图像或单通道图像。
  2. mask:掩膜

返回值

  1. mean: 四元组,表示RGB以及A通道的均值。(r,g,b,a)

4 示例:

import cv2
import numpy as np
import matplotlib.pyplot as plt

## 1、读取图像
img = cv2.imread("C:/Users/xxx/Downloads/arrow.png")


## 2、转换为 matplotlib.pyplot的图像,由BGR->RGB
img = cv2.merge((img[:,:,2],img[:,:,1],img[:,:,0]))

## 3、转换为灰度图像
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)


## 4、转换为二至图像
ret, binary = cv2.threshold(gray, 127, 255, cv2.THRESH_BINARY)


## 5、寻找轮廓
contours, hierarchy = cv2.findContours(binary, cv2.RETR_LIST, cv2.CHAIN_APPROX_SIMPLE)


## 6、在全黑的底图上绘制轮廓
print(len(contours))
for i in range(len(contours)):
    mask = np.zeros(gray.shape, np.uint8)
    cv2.drawContours(mask, [contours[i]], 0, 255, 2)


## 7、获取图像中的最小值、最大值、最小值、最大值所在的位置,其
##    中位置是一个二元组(x,y)
min, max, min_loc, max_loc = cv2.minMaxLoc(gray, mask)
print(f'minVal={min}, maxVal={max}, Loc of minVal={min_loc}, Loc of maxVal={max_loc}.')

## 8、求图像中的非零值点的位置
pixelpoints=cv2.findNonZero(mask)
print(f'Points of NonZero in mask ={pixelpoints}.')

## 9、求图像中的平均灰度
mean=cv2.mean(img,mask)
print(f'mean of  img ={mean}.')

## 10、显示图像

cv2.imshow("img", img)
cv2.imshow("gray", gray)
cv2.imshow("binary", binary)
cv2.imshow('contours',mask)
cv2.waitKey(0)
cv2.cv2.destroyAllWindows()

 运行结果为:

1
minVal=0.0, maxVal=255.0, Loc of minVal=(110, 94), Loc of maxVal=(112, 99).
Points of NonZero in mask =[[[109  94]]

 [[110  94]]

 [[108  95]]

 ...

 [[216 195]]

 [[217 195]]

 [[218 195]]].
mean of  img =(158.47901591895803, 158.47901591895803, 158.47901591895803, 0.0).

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值