资讯专栏INFORMATION COLUMN

openCV+ Python3.7 Simpleblobdetecter() 识别斑点

baiy / 3271人阅读

摘要:主要运用了局部对比度增强输入图片路径即可转换通道这里提供使用计算局部均质和方差的方法这里输入文件圆度大小

主要运用了局部对比度增强

输入图片路径即可

 

import numpy as npimport cv2def getVarianceMean(scr, winSize):    if scr is None or winSize is None:        print("The input parameters of getVarianceMean Function error")        return -1    if winSize % 2 == 0:        print("The window size should be singular")        return -1    copyBorder_map=cv2.copyMakeBorder(scr,winSize//2,winSize//2,winSize//2,winSize//2,cv2.BORDER_REPLICATE)    shape=np.shape(scr)    local_mean=np.zeros_like(scr)    local_std=np.zeros_like(scr)    for i in range(shape[0]):        for j in range(shape[1]):            temp=copyBorder_map[i:i+winSize,j:j+winSize]            local_mean[i,j],local_std[i,j]=cv2.meanStdDev(temp)            if local_std[i,j]<=0:                local_std[i,j]=1e-8    return local_mean,local_stddef adaptContrastEnhancement(scr, winSize, maxCg):    if scr is None or winSize is None or maxCg is None:        print("The input parameters of ACE Function error")        return -1    YUV_img=cv2.cvtColor(scr,cv2.COLOR_BGR2LAB)    ##转换通道    Y_Channel = YUV_img[:,:,0]    shape=np.shape(Y_Channel)    meansGlobal=cv2.mean(Y_Channel)[0]    ##这里提供使用boxfilter 计算局部均质和方差的方法    #    localMean_map=cv2.boxFilter(Y_Channel,-1,(winSize,winSize),normalize=True)    #    localVar_map=cv2.boxFilter(np.multiply(Y_Channel,Y_Channel),-1,(winSize,winSize),normalize=True)-np.multiply(localMean_map,localMean_map)    #    greater_Zero=localVar_map>0    #    localVar_map=localVar_map*greater_Zero+1e-8    #    localStd_map = np.sqrt(localVar_map)    localMean_map, localStd_map=getVarianceMean(Y_Channel,winSize)    for i in range(shape[0]):        for j in range(shape[1]):            cg = 0.2*meansGlobal/ localStd_map[i,j];            if cg >maxCg:                cg=maxCg            elif cg<1:                cg=1            temp = Y_Channel[i,j].astype(float)            temp=max(0,min(localMean_map[i,j]+cg*(temp-localMean_map[i,j]),255))            #            Y_Channel[i,j]=max(0,min(localMean_map[i,j]+cg*(Y_Channel[i,j]-localMean_map[i,j]),255))            Y_Channel[i,j]=temp    YUV_img[:,:,0]=Y_Channel    dst=cv2.cvtColor(YUV_img,cv2.COLOR_YUV2BGR)    return dstdef callback(object):    passcv2.namedWindow("image", cv2.WINDOW_NORMAL)img1 = cv2.imread("Test01_image48.jpg")  #这里输入文件dstimg=adaptContrastEnhancement(img1,15,10)# img2=cv2.cvtColor(img1,cv2.COLOR_RGB2LAB)cv2.createTrackbar("minArea", "image", 0, 1000, callback)cv2.createTrackbar("maxArea", "image", 0, 2000, callback)cv2.createTrackbar("minCircularity", "image", 0, 99, callback)cv2.createTrackbar("minConvexity", "image", 0, 99, callback)cv2.createTrackbar("minInertiaRatio", "image", 0, 99, callback)params = cv2.SimpleBlobDetector_Params()params.filterByCircularity = True  #圆度params.filterByArea=True  #大小params.filterByInertia = Trueparams.filterByConvexity = Truewhile True:    minCircularity = cv2.getTrackbarPos("minCircularity", "image")    minConvexity = cv2.getTrackbarPos("minConvexity", "image")    minInertiaRatio = cv2.getTrackbarPos("minInertiaRatio", "image")    minArea = cv2.getTrackbarPos("minArea", "image")    maxArea = cv2.getTrackbarPos("maxArea", "image")    lower_red = np.array([150, 0, 155])    upper_red = np.array([255, 255, 255])    # mask=cv2.inRange(dstimg, lower_red, upper_red)    #    # kernel = cv2.getStructuringElement(cv2.MORPH_RECT,(5,5))    # out = cv2.morphologyEx(mask, cv2.MORPH_OPEN, kernel,iterations=5)    #    # out=cv2.bitwise_not(out)    params.minCircularity = (minCircularity + 1) / 100.0    params.minConvexity = (minConvexity + 1) / 100.0    params.minInertiaRatio = (minInertiaRatio + 1) / 100.0    params.minArea = minArea + 1    params.maxArea = maxArea + 1    detector = cv2.SimpleBlobDetector_create(params)    keypoints = detector.detect(dstimg)    im_with_keypoints = cv2.drawKeypoints(img1, keypoints, np.array([]), (0,0,255), cv2.DRAW_MATCHES_FLAGS_DRAW_RICH_KEYPOINTS)    cv2.imshow("image", im_with_keypoints)    print(len(keypoints))    print(minArea)    print(maxArea)    if cv2.waitKey(10) & 0xFF == ord("q"):        breakcv2.destroyAllWindows()

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/118994.html

相关文章

  • 【经验分享】谈谈工业质检中的二维定位算子

    摘要:本文主要聊一下工业质检中的二维定位算子。工业领域的计算机视觉也往往被叫做机器视觉,包括机械手引导定位读码工业部件测量缺陷检测体积等应用。同样,在其他的视觉软件中,模板比对可能有着不一样的名称,比如基恩士就叫轮廓比对。 ...

    haitiancoder 评论0 收藏0
  • 基于Opencv的手势识别

    摘要:同时打印出了手上的每个结点的位置变化。解决方案使用国内镜像安装这时候,考虑使用国内镜像安装,会快很多。点击下面的即可。 文章目录 一、 效果(版本2的效果)二、全...

    曹金海 评论0 收藏0
  • 树莓派4B安装OpenCV-4.5.2

    摘要:最近实验室有个图像识别的项目,目前程序写得差不多了,硬件设备在别人公司,想着在自己的树莓派上运行一下。安装之前的配置要做好。与不同的是,在处理依赖问题上更佳一些。举例来说,在删除一个包时,会同时删除本身所依赖的包。         最近实验室有个图像识别的项目,目前程序写得差不多了,硬件设备...

    Betta 评论0 收藏0
  • Python调用海康威视网络相机C++的SDK

    摘要:调用海康威视网络相机的本文参考笔者将此文章中遗漏或未遇见的问题归纳总结,并分享自己在运行过程中遇到的问题,与君共勉。其次,将海康威视文件夹中文件夹下所有文件复制到文件夹下。 ...

    csRyan 评论0 收藏0
  • 机器视觉、模式识别库汇总

    摘要:十开放模式识别项目开放模式识别项目,致力于开发出一套包含图像处理计算机视觉自然语言处理模式识别机器学习和相关领域算法的函数库。 一、开源生物特征识别库 OpenBROpenBR 是一个用来从照片中识别人脸的工具。还支持推算性别与年龄。使用方法:$ br -algorithm FaceRecognition -compare me.jpg you.jpg二、计算机视觉库 OpenCVOpenC...

    habren 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<