【PyQt + Opencv】草原草畜平衡监测图像的分析

目录

一、简介

二、颜色识别原理

三、功能模块设计

四、盖度计算流程

五、软件实现效果


一、简介

        随着国家对生态环境保护意识的不断加强,草原草畜平衡也逐渐被重视,草原草畜平衡涉及“四度一量”,而本文主要研究“盖度”。植被盖度是指植被(包括叶、茎、枝)在地面的垂直投影面积占统计区总面积的百分比。植被覆盖度作为反映地表信息的重要参数,一直以来都是遥感领域的重要研究课题之一。通常植被覆盖度的测量方法有地表实测和遥感监测。 本文对图片进行颜色识别,根据图片识别结果中植被占图片总面积的比例来得出植被覆盖度。

二、颜色识别原理

(1)利用OpenCV的cvtColor函数接口可以将图片格式转换为HSV格式,绿色的HSV取值H在35到77,S在43到255,V在46到255之间;

绿色的HSV数值区间如下:

绿

Hmin

0

0

0

156

11

26

35

78

100

hmax

180

180

180

180

25

34

77

99

124

smin

0

0

0

43

43

43

43

43

43

smax

255

43

30

255

255

255

255

255

255

Vmin

0

46

221

46

46

46

46

46

46

Vmax

46

220

255

255

255

255

255

255

255

(2)然后利用颜色识别按照绿色面积占图片总面积的比例计算植被覆盖度;

读取本地文件夹中的图片,将图片的格式转换为容易读取的像素点组成格式,然后对图片进行区域划分,筛选出绿色覆盖的有效区域,接着测量绿色面积在图片总面积中覆盖的面积,最后进行绿色面积的百分比计算。

三、功能模块设计

【PyQt + Opencv】草原草畜平衡监测图像的分析_第1张图片

1、图片批量加载:读取本地文件夹,加载文件夹内保存的图片

2、图片预处理:图片的比例缩放

3、颜色识别:对特定颜色,绿色识别

4、绿色占比计算:能够根据选择的图片分别计算出占比

5、界面显示:显示图片效果、检测结果

四、盖度计算流程

1、读取一张图

Img = cv2.imread(path)  # 读入一幅图像

2、把图片进行格式转换 

 HSV = cv2.cvtColor(Img, cv2.COLOR_BGR2HSV) # 图片格式转换

3、把图片中在颜色范围内的区域变成白色,其他区域变成黑色

 self.Lower = np.array([35, 43, 46])  # 要识别颜色的下限

 self.Upper = np.array([77, 255, 255])  # 要识别的颜色的上限、

 mask = cv2.inRange(HSV, self.Lower, self.Upper)

【PyQt + Opencv】草原草畜平衡监测图像的分析_第2张图片

4、对图片进行筛选处理

# 下面四行是用筛选操作

  # erode()函数可以对输入图像用特定结构元素进行操作,该结构元素确定操作过程中的邻域的形状,

  # 各点像素值将被替换为对应邻域上的最小值:

  erosion = cv2.erode(mask, self.kernel_3, iterations=1)

  erosion = cv2.erode(erosion, self.kernel_3, iterations=1)

  # dilate()函数可以对输入图像用特定结构元素进行操作,该结构元素确定操作过程中的邻域的形状,

  # 各点像素值将被替换为对应邻域上的最大值:

  dilation = cv2.dilate(erosion, self.kernel_3, iterations=1)

  dilation = cv2.dilate(dilation, self.kernel_3, iterations=1)

【PyQt + Opencv】草原草畜平衡监测图像的分析_第3张图片

5、检测出物体的轮廓,读取所有的轮廓,在图像上画上矩形标记

 # 在binary中发现轮廓,轮廓按照面积从小到大排列

 binary, contours, hierarchy = cv2.findContours(binary, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)

p = 0

green_area = 0

for i in contours:  # 读取所有的轮廓

 x, y, w, h = cv2.boundingRect(i)  # 将轮廓分解为识别对象的左上角坐标和宽、高

green_area += w * h

# 在图像上画上矩形(图片、左上角坐标、右下角坐标、颜色、线条宽度)

cv2.rectangle(Img, (x, y), (x + w, y + h), (0, 255,), 3)

# 给识别对象写上标号

 font = cv2.FONT_HERSHEY_SIMPLEX

cv2.putText(Img, str(p),(x - 10, y + 10), font, 1,(0,0,255), 2)  # 加减10是调整字符位置

 p += 1

6、绿色比例计算方法

先计算图片总大小

total_area = Img.shape[0]*Img.shape[1]  # 总面积

再计算所有绿色区域,求和

for i in contours:  # 遍历所有的轮廓

x, y, w, h = cv2.boundingRect(i)  # 将轮廓分解为识别对象的左上角坐标和宽、高

green_area += w * h

 p += 1

 print('green方块的数量是', p, '个')  # 终端输出目标数量

最终计算百分比

 percent = (green_area / total_area)*100

五、软件实现效果

进入界面,选择一个存在图片的文件夹

【PyQt + Opencv】草原草畜平衡监测图像的分析_第4张图片

 加载完成后,单击左边的图片,出现检测结果,支持图片放大缩小查看

草原草畜平衡监测图像的分析系统-Python文档类资源-CSDN下载

你可能感兴趣的:(QT学习之路,pyqt,opencv,盖度计算)