目标检测-基于轮廓字符计数

文章目录[隐藏]

基于轮廓字符计数

1. 字符图片
在这里插入图片描述
2. 字符图片灰度化
将彩色图像转换成灰度图像,采用的灰度平均值法,公式为:H=0.229R+0.587G+0.144B(opencv,BGR格式) 公式中 H表示灰度图的亮度值;R代表彩色图像红色分量值;G代表色彩图像绿色分量值;B代表彩色图像蓝色分量值。RGB三分量前的系数为经验加权值,加权系数的取值建立在人眼的视觉模型之上。对于人眼较为敏感的绿色取较大的权值;对人眼较为不敏感的蓝色则取较小的权值。
灰度图
3. 梯度计算
边缘是指图像灰度发生空间突变或者在梯度方向上发生突变的像素的集合。本从采用Sobel算子,以X和Y方向上的梯度分别进行计算,最后通过混合加权得到整幅图像得梯度。
在这里插入图片描述
再利用Sobel算子计算时,白到黑是整数,黑到白就是负数,所有负数会被截断成0,所以要取绝对值。

X和Y方向上的梯度
通过加权合并两幅梯度图像
目标检测-cv2.addWeighted
在这里插入图片描述
4.绘制轮廓
findContours:
mode:cv2.EXTERNAL 只检测最外围轮廓
method:cv2.CHAIN_APPROX_NONE 围绕边界周围构造出轮廓,以线条形式
轮廓的数量会存储在contours中,打印输出列表即可显示出字符数量。print(len(contours))
在这里插入图片描述
完整代码如下:

import cv2
import numpy as np
#打开图片
img_A = cv2.imread('CAR.jpg')
#灰度变换
def rgb2gray(img):
    h=img.shape[0]
    w=img.shape[1]
    gray=np.uint8(np.zeros((h,w)))
    for i in range(h):
        for j in range(w):
            gray[i,j]=0.144*img[i,j,0]+0.587*img[i,j,1]+0.299*img[i,j,2]#BGR
    return gray
img_gray=rgb2gray(img_A)
cv2.imshow('1',img_gray)
cv2.imwrite("gray.jpg",img_gray)
# 将图像将根据阈值二值化处理
rest,thresh=cv2.threshold(img_gray,100,255,cv2.THRESH_BINARY_INV)
#求对X的梯度
img_x=cv2.Sobel(thresh,cv2.CV_64F,1,0,ksize=3)
img_x=cv2.convertScaleAbs(img_x)
#求对Y的梯度
img_y=cv2.Sobel(thresh,cv2.CV_64F,0,1,ksize=3)
img_y=cv2.convertScaleAbs(img_y)
img_add=cv2.addWeighted(img_x,0.5,img_y,0.5,0)

#img_hstack=np.hstack((img_x,img_y))
#cv2.imwrite("Grand.jpg",img_hstack)
#cv2.imshow('5',img_hstack)
contours, hierarchy=cv2.findContours(img_add,cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)
print(len(contours))#字符number
img_result=img_A.copy()
for contour in contours:
    cv2.drawContours(img_result, [contour,], -1, (255, 0, 0), 2,0)  # bule
    cv2.putText(img_result, "number=%d" % (int(len(contours))),(100, 150),0,1,(255, 0, 0),3)
cv2.imshow('4',img_result)
cv2.waitKey()

版权声明:本文为CSDN博主「记住0和1」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/hello15617900040/article/details/121879406

记住0和1

我还没有学会写个人说明!

暂无评论

发表评论

相关推荐

Python如何优雅地可视化目标检测框

1 引言 随着计算机视觉算法工程师的内卷,从事目标检测的小伙伴们越来越多了. 很多时候我们费了九牛二虎之力训练了一版模型,可是可视化出来的效果平淡无奇. 是不是有点太不给力啦,作为计算机视觉工程师,我们是不是应该关注下如何优雅地可视化我们模型

YOLOX训练自己的数据

YOLOX是旷世开源的用于目标检测的算法,相比于YOLO(V3-V5)系列,在精度上有提升,速度上也具有一定的竞争优势。 介绍 YOLOX是YOLO的anchor-free版本,设计更