Python-OpenCV分割图像查枸杞的个数

简介: Python-OpenCV分割图像查枸杞的个数

图像分割算法有分水岭算法、斑点计数算法、霍夫圆/椭圆算法、轮廓检测算法等。在本文中,本例使用了轮廓检测和分水岭算法。

tt.png


第一步导入依赖


from __future__ import print_function

import numpy as np

import cv2

import matplotlib.pyplot as plt

from skimage import io

from skimage.morphology import watershed

from skimage.feature import peak_local_max

from scipy import ndimage


创建可视化图像函数:


def show(img):


   plt.imshow(img)


   plt.show()

读取图像


#load


fp = "1.jpg"


img = cv2.imread(fp)


show(img)


print(img.shape)

对图像进行预处理。步骤包括:


HSV,这是人眼感知的颜色模型。

阈值技术,通过选定的阈值像素强度将图像转换为二值图像(即只有2个像素值(0或255))。

模糊图像,以删除图像中不必要的斑点。

#preprocessing the image

hsv = cv2.cvtColor(img, cv2.COLOR_BGR2HSV)

show(hsv)


tt.png

现在我们使用轮廓检测,在我们“模糊”的图像中找到枸杞。为了去除小的和无关紧要的轮廓,我们只选择那些面积大于2000的轮廓(任意值,是超参数)。


contours, hierarchy = cv2.findContours(blur,cv2.RETR_TREE,cv2.CHAIN_APPROX_SIMPLE)

copy2 = img.copy()

count = []

for x in contours:

   area = cv2.contourArea(x)

   if area > 2000 :

       count.append(x)

cv2.drawContours(copy2, count, -1, (255,0,0), 3)

show(copy2)

print("number of lemons found via contour detection = ", len(count))


完整代码:


from __future__ import print_function

import numpy as np

import cv2

import matplotlib.pyplot as plt

from skimage import io

from skimage.morphology import watershed

from skimage.feature import peak_local_max

from scipy import ndimage


def show(img):

   plt.imshow(img)

   plt.show()

#load

fp = "1.jpg"

img = cv2.imread(fp)

show(img)

print(img.shape)

#preprocessing the image

hsv = cv2.cvtColor(img, cv2.COLOR_BGR2HSV)

show(hsv)

h, s, v = cv2.split(hsv)

show(s)

_, thr = cv2.threshold(s, 0, 255, cv2.THRESH_BINARY + cv2.THRESH_OTSU)

show(thr)

blur = cv2.medianBlur(thr, 5)

show(blur)

contours, hierarchy = cv2.findContours(blur,cv2.RETR_TREE,cv2.CHAIN_APPROX_SIMPLE)

copy2 = img.copy()

count = []

for x in contours:

   area = cv2.contourArea(x)

   if area > 2000 :

       count.append(x)

cv2.drawContours(copy2, count, -1, (255,0,0), 3)

show(copy2)

print("number of lemons found via contour detection = ", len(count))

copy3 = img.copy()

D = ndimage.distance_transform_edt(thr)

localMax = peak_local_max(D, indices=False, min_distance=300,

  labels=thr)

markers = ndimage.label(localMax, structure=np.ones((3, 3)))[0]

labels = watershed(-D, markers, mask=thr)

ws = len(np.unique(labels)) -1

copy3[labels == -1] = [255,0,0]

print("no. of lemons found via watershed algorithm = ", ws)

ans = int((len(count) + len(np.unique(labels)) -1) / 2)

print("number of lemon segments detected = ", ans)

show(copy2)

















tt.png

目录
相关文章
|
4月前
|
计算机视觉 Windows Python
windows下使用python + opencv读取含有中文路径的图片 和 把图片数据保存到含有中文的路径下
在Windows系统中,直接使用`cv2.imread()`和`cv2.imwrite()`处理含中文路径的图像文件时会遇到问题。读取时会返回空数据,保存时则无法正确保存至目标目录。为解决这些问题,可以使用`cv2.imdecode()`结合`np.fromfile()`来读取图像,并使用`cv2.imencode()`结合`tofile()`方法来保存图像至含中文的路径。这种方法有效避免了路径编码问题,确保图像处理流程顺畅进行。
378 1
|
5月前
|
机器学习/深度学习 人工智能 算法
Python在计算机视觉(CV)中扮演重要角色,得益于其丰富的库如OpenCV、Pillow和Scikit-image。
【7月更文挑战第5天】Python在计算机视觉(CV)中扮演重要角色,得益于其丰富的库如OpenCV、Pillow和Scikit-image。CV涉及图像处理、模式识别和机器学习,用于图像理解和生成。Python的跨平台特性和活跃社区使其成为CV的理想工具。基本流程包括图像获取、预处理、特征提取、分类识别及图像生成。例如,面部识别通过预处理图像,使用如`cv2.CascadeClassifier`进行检测;物体检测类似,但需适应不同目标;图像生成则利用GAN创造新图像。
71 4
|
2月前
|
计算机视觉 Python
python利用pyqt5和opencv打开电脑摄像头并进行拍照
本项目使用Python的PyQt5和OpenCV库实现了一个简单的摄像头应用。用户可以通过界面按钮打开或关闭摄像头,并实时预览视频流。点击“拍照”按钮可以捕捉当前画面并保存为图片文件。该应用适用于简单的图像采集和处理任务。
115 0
python利用pyqt5和opencv打开电脑摄像头并进行拍照
|
2月前
|
机器学习/深度学习 算法 计算机视觉
【Python篇】Python + OpenCV 全面实战:解锁图像处理与视觉智能的核心技能
【Python篇】Python + OpenCV 全面实战:解锁图像处理与视觉智能的核心技能
75 2
|
4月前
|
算法 计算机视觉 Python
python利用opencv进行相机标定获取参数,并根据畸变参数修正图像附有全部代码(流畅无痛版)
该文章详细介绍了使用Python和OpenCV进行相机标定以获取畸变参数,并提供了修正图像畸变的全部代码,包括生成棋盘图、拍摄标定图像、标定过程和畸变矫正等步骤。
python利用opencv进行相机标定获取参数,并根据畸变参数修正图像附有全部代码(流畅无痛版)
|
4月前
|
存储 编解码 API
python多种方法压缩图片,opencv、PIL、tinypng、pngquant压缩图片
python多种方法压缩图片,opencv、PIL、tinypng、pngquant压缩图片
300 1
|
4月前
|
算法 定位技术 vr&ar
一文了解PnP算法,python opencv中的cv2.solvePnP()的使用,以及使用cv2.sovlePnP()方法标定相机和2D激光雷达
一文了解PnP算法,python opencv中的cv2.solvePnP()的使用,以及使用cv2.sovlePnP()方法标定相机和2D激光雷达
586 0
一文了解PnP算法,python opencv中的cv2.solvePnP()的使用,以及使用cv2.sovlePnP()方法标定相机和2D激光雷达
|
4月前
|
机器学习/深度学习 人工智能 监控
利用Python和OpenCV实现实时人脸识别系统
【8月更文挑战第31天】本文将引导您了解如何使用Python结合OpenCV库构建一个简易的实时人脸识别系统。通过分步讲解和示例代码,我们将探索如何从摄像头捕获视频流、进行人脸检测以及识别特定个体。本教程旨在为初学者提供一条明晰的学习路径,帮助他们快速入门并实践人脸识别技术。
|
5月前
|
机器学习/深度学习 数据采集 算法
Python基于OpenCV和卷积神经网络CNN进行车牌号码识别项目实战
Python基于OpenCV和卷积神经网络CNN进行车牌号码识别项目实战
342 19
|
6月前
|
机器学习/深度学习 监控 自动驾驶
如何使用 Python 和 OpenCV 进行实时目标检测
如何使用 Python 和 OpenCV 进行实时目标检测