赞
踩
在有些现实场景中,咱们须要去使用算法自动的寻找到图片中的最亮的区域,这个区域是咱们感兴趣的目标所在的位置,比较典型的是一个应用是视网膜图像,图像中视网膜所在的位置比较亮,而其它地方比较暗,咱们更加关注视网膜所在的区域,于是须要使用算法自动的寻找到这个区域,而后针对这个区域进行处理和分析。
要检测出图像中最亮的区域,咱们能够直接使用opencv中自带的函数(minVal, maxVal, minLoc, maxLoc) = cv2.minMaxLoc(gray),该函数是用来获取图像中的最大值和最小值 所在的位置,而图像中的最大值其实就是最亮的像素点,图像中的最小值其实就是最暗的像素点,该函数的输入参数是一张灰度图像,该函数会返回最大值、最小值、最大值所在位置和最小值所在位置等,咱们能够根据得到的位置信息绘制结果。
函数原型:
(minVal,maxVal,minLoc,maxLoc)=cv2.minMaxLoc(gray,mask=None)
参数:
返回值:
函数用于获取一个图像内的轮廓点位置
函数原型:
idx=cv2.findNonZero(src,idx=none)
参数:
返回值:
函数用于获取一个图像内的轮廓点位置
函数原型:
mean=cv2.mean(src,mask=none)
参数:
返回值:
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).
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。