当前位置:   article > 正文

opencv(39) 图像轮廓之八:minMaxLoc、findNonZero、mean_cv2.findnonzero

cv2.findnonzero

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).

声明:本文内容由网友自发贡献,转载请注明出处:【wpsshop】
推荐阅读
相关标签
  

闽ICP备14008679号