边界框对对象进行了注释。作者的照片
在本文中,我们将讨论图像处理中的注释。注释的概念用于突出显示图像中的对象和对象总数。
如下所示,在以下步骤中解释了注释对象的过程:
这一步包括在处理计算机视觉应用的 OpenCV 库的帮助下读取原始图像。
导入必要的库
import numpy as np
import imutils
import cv2
numpy 用于对图像像素进行数值运算。“ imutils ”用于帮助 OpenCV 的图像预处理功能。 cv2 是一个计算机视觉库。
原图。作者的照片
从工作目录中读取图像文件。
image = cv2.imread('bg5.png') #reads the image
OpenCV 的要点是它读取 BGR 格式的图像,我们需要将其转换成 RGB 格式。
rgb_image = cv2.cvtColor(image, cv2.COLOR_BGR2RGB)
颜色空间用于获得二值化阈值的良好灰度图像。这里,我们使用 HSV 颜色空间。
hsv_image = cv2.cvtColor(rgb_image, cv2.COLOR_RGB2HSV)
h, s, v = cv2.split(hsv_image)#it is used to save the h component image
cv2.imwrite('H.jpg',h)
H 分量图像的灰度图像。作者的照片
现在,我们将做二进制阈值
ret, th1 = cv2.threshold(h,180,255, cv2.THRESH_BINARY+cv2.THRESH_OTSU)
kernel = np.ones((1,1), dtype = "uint8")/9
bilateral = cv2.bilateralFilter(th1, 9 , 75, 75)
erosion = cv2.erode(bilateral, kernel, iterations = 1)cv2.imwrite('mask_erosion.jpg',erosion)
掩码或二进制图像。作者的照片
[## 用 Python 实现 OpenCV 中二值图像处理阈值的类型
pub.towardsai.net](/types-of-binary-image-processing-threshold-in-opencv-with-python-2f9b7f8795f9)
在上面的图像中,我们可以看到有许多噪声以小白区域的形式出现在图像中,我们需要从图像中移除这些小白区域以获得完美的二值图像。
#finding the area of all connected white pixels in the image
pixel_components, output, stats, centroids =
cv2.connectedComponentsWithStats(erosion, connectivity=8)
当我们在图像中使用连通分量方法时,它将图像中的白色和黑色对象分开。我们只是希望白色像素对象被删除,并忽略黑色像素。
area = stats[1:, -1]; pixel_components = pixel_components - 1
现在我们将从图像中移除小的白噪声。
min_size = 1000#your answer image
img2 = np.zeros((output.shape))#Removing the small white pixel area below the minimum size
for i in range(0, nb_components):
if area[i] >= min_size:
img2[output == i + 1] = 255
cv2.imwrite('img2.jpg',img2)
很好的二值图像。作者的照片
现在,我们得到了好的二进制图像。是时候找出图像中白色像素的轮廓/面积了,因为我们知道白色像素是我们的目标。
img3 = img2.astype(np.uint8)
# find contours in the thresholded image
cnts = cv2.findContours(img3.copy(), cv2.RETR_EXTERNAL,
cv2.CHAIN_APPROX_SIMPLE)cnts = imutils.grab_contours(cnts)
print("[INFO] {} unique contours found".format(len(cnts)))
pub.towardsai.net](/data-preprocessing-concepts-with-python-b93c63f14bb6) [## 用 Python 理解时间序列组件
pub.towardsai.net](/understand-time-series-components-with-python-4bc3e2ba1189)
在这一步中,我们将用边界框标注对象。
# For making box around the Grape Bunch
for j in cnts:
rect = cv2.boundingRect(j)
x,y,w,h = rect
cv2.rectangle(image, (x,y),(x+w,y+h),(255,0,255),2) cv2.imwrite('result.jpg',image)
输出图像。作者的照片
图像中物体的标注在农业、机器人视觉、环境等领域有着非常有用的应用。
我希望你喜欢这篇文章。通过我的 LinkedIn 和 twitter 联系我。
1。NLP —零到英雄用 Python 2。 Python 数据结构数据类型和对象 3。Python 中的异常处理概念 4。用 Python 进行主成分分析降维 5。用 Python 全面讲解 K-means 聚类 6。用 Python 充分解释了线性回归 7。用 Python 充分解释了 Logistic 回归 8。Nengo:一个新的神经网络构建和部署工具。与 Python 的数据角力—第一部分10。机器学习中的混淆矩阵