使用Python+opencv+k-means根据扫描图片计算叶片面积-续
Posted 空中旋转篮球
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用Python+opencv+k-means根据扫描图片计算叶片面积-续相关的知识,希望对你有一定的参考价值。
一 、概述
之前写了一篇计算叶片面积的文章,后来想想其实没有那么复杂,直接二值化计算即可得到,原来的代码写了几十行,其实十余行就可以计算得到叶片面积了。
原文:使用Python+opencv+k-means根据扫描图片计算叶片面积
使用相同的叶片图片进行计算,图片如下:
二、简洁代码
代码如下:
import cv2
img0 = cv2.imread(r'02.jpg', flags=1)
img0 = img0[1:, 1:, 0] #获取B通道图片,B通道更能区别叶片色彩;且将不必要部分截除,便于处理。
cv2.imshow("imagin0", img0)
cv2.waitKey()
cv2.destroyWindow("imagin0")
r, c = img0.shape
print(r,c)
leaves,background=0,0 #leaves为叶片像素 background为背景像素
for i in range(r):
for j in range(c):
if img0[i][j]>180:
background+=1
else:
leaves+=1
a = leaves * 21.0*29.7 / (background+leaves) #原图实际大小为A4大小的情况下
print(leaves, background, a)
#计算结果 7013 4961 15886657 18904836 284.7968602813337
三、结果比较
原代码结果是:34791493 15551356 278.7859876320915 计算结果
两个结果分别是284.7968602813337和278.7859876320915 相差2.0% ,比较接近了。
四、存在问题
本文代码阈值设置问题需要提前预判测定,需要认为干预,比如我通过ps软件看了一下叶片和背景值的像素值判断的一个值,即文中的180,可能不具有普适性,需要根据数据的质量确定适用性了。如果用做批处理许多不同的照片,结果可能就会出现一些不确定性了。
以上是关于使用Python+opencv+k-means根据扫描图片计算叶片面积-续的主要内容,如果未能解决你的问题,请参考以下文章
使用Python+opencv+k-means根据扫描图片计算叶片面积-续
OpenCV-Python实战(番外篇)——利用 K-Means 聚类进行色彩量化
Python,OpenCV中的K均值聚类——K-Means Cluster
毕业了,在Python中使用 OpenCV 和K-Means 聚类对毕业照进行图像分割