python处理缺陷图象返回缺陷面积数量

原创 2018年04月16日 17:14:46
import cv2
import numpy as np
import os
global allmin
global allmax
global allarea
global allnum
allmin=50000
allmax=0
allarea=0
allnum=0
def Change(img):
    # 改黑白图为白黑图,也可以用cvThreshold函数
    sp = img.shape
    height = sp[0]  # height(rows) of image
    width = sp[1]  # width(colums) of image
    size = (width, height)
    iTmp = np.zeros(img.shape, np.uint8)
    for i in range(height):
        for j in range(width):
            iTmp[i, j] = 255 - img[i, j]
    cv2.imwrite(path, iTmp)# 覆盖原黑白图
    print("图像 %s 覆盖成功!" % (path))

# 消除微小区域
def Big(contour):
    c_max = []
    for i in range(len(contour)):
        cnt = contours[i]
        area = cv2.contourArea(cnt)
        if area < 30:
            contour.append(contour[i])
            c_min = []
            c_min.append(cnt)
            # thickness不为-1时,表示画轮廓线,thickness的值表示线的宽度。
            cv2.drawContours(img, c_min, -1, (0, 0, 0), thickness=-1)
            continue
        c_max.append(cnt)
    cv2.drawContours(img, c_max, -1, (255, 255, 255), thickness=-1)
    cv2.imwrite(path, img)
    print("图像 %s 修改成功!" % (path))

def areaCal(contour):
    global allmin
    global allmax
    global allarea
    global allnum
    area = 0
    min=111111
    max=0

    for i in range(len(contour)):
        if cv2.contourArea(contour[i])>10:
            if cv2.contourArea(contour[i])>max:
                max=cv2.contourArea(contour[i])
            if cv2.contourArea(contour[i])<min:
                min=cv2.contourArea(contour[i])
            area += cv2.contourArea(contour[i])
            # print(len(contour))
            print(" %d 个区域,第 %d 个区域的面积为: %d" %(len(contour),i+1,cv2.contourArea(contour[i])))
    if area == 0:
        min = 0
    if min < allmin and min > 0:
        allmin = min
    if max > allmax:
        allmax = max
    allarea +=area
    allnum += len(contour)
    print("区域总面积为:%d,最大面积为: %d,最小面积为: %d" % (area,max,min))
#计算缺陷周长
def perimeterCal(contour):

    perimeter=0
    for i in range(len(contour)):
        if cv2.arcLength(contour[i],True)>10:
            perimeter += cv2.arcLength(contour[i],True)
            # print(" %d 个缺陷,第 %d 个缺陷的周长为: %d" % (len(contour), i+1, cv2.arcLength(contour[i],True)))
    print("区域总周长为:%d" % perimeter)

num=0
filenum = 0
print("程序开始运行......")
# if num==668:
while num<1600:
    num += 1
    path='E:/cvtest/'+ str(num) +'.bmp'
    if os.path.exists(path):
        filenum += 1
        img = cv2.imread(path)
        print("图像 %s 加载成功!" %(path))
        # Change(img)
        gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
        ret, binary = cv2.threshold(gray, 127, 255, cv2.THRESH_BINARY)
        # 轮廓检测函数
        binary,contours, hierarchy = cv2.findContours(binary, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE)
        # 绘制轮廓
        cv2.drawContours(img, contours, -1, (0, 0, 255), 3)
        # Big(contours)

        areaCal(contours)
        perimeterCal(contours)
        cv2.imshow("binary", binary)
        cv2.imshow("outline", img)
        cv2.waitKey(0)
        cv2.destroyAllWindows()

averagearea = allarea/allnum
averagenum = allnum/filenum
print("区域最大面积为:%d" % (allmax))
print("区域最小面积为:%d" % (allmin))
print("区域平均面积为:%d" % (averagearea))
print("区域平均数量为:%d" % (averagenum))
print("区域总数量为:%d" % (allnum))
print("图像总数量为:%d" % (filenum))



意外操作暴露Python的缺陷

在使用Python语言时发现, 如果调用修改Windows文件系统的操作, 可能会执行失败.笔者在执行os.rename()时就发生了此事儿, 后来才发现, 原来被更名的原文件在Windows操作系统...
  • wangchinaking
  • wangchinaking
  • 2007-07-25 10:20:00
  • 1064

“程序中遗留的缺陷与已检测出的缺陷成正比”之我所见

程序中遗留的缺陷数量与已检测出的缺陷数量呈正比,请解释为什么程序测试会出现这种情况。答:    设编写一个程序出现缺陷的概率为a,所编写的程序代码数量为b    则在这个程序中缺陷的代码数量为ab  ...
  • wubin072608
  • wubin072608
  • 2010-08-24 22:37:00
  • 831

软件测试与软件调试的区别

(1) 测试是为了发现软件中存在的错误;调试是为了证明软件开发的正确性。(2) 测试以已知条件开始,使用预先定义的程序,且有预知的结果,不可预见的仅是程序是否通过测试;调试一般是以不可知的内部条件开始...
  • wubin072608
  • wubin072608
  • 2010-08-24 22:44:00
  • 872

Python编程opencv图像检测缺陷

  • 2017年11月16日 20:58
  • 1.67MB
  • 下载

Opencv(Python) 教程-轮廓(4)凹缺陷(凸缺陷)/点与轮廓关系/形状匹配

凹缺陷/凸缺陷 前面我们已经学习了轮廓的凸包,对象上的任何凹陷都被成为凸缺陷。OpenCV 中有一个函数 cv.convexityDefect() 可以帮助我们找到凸缺陷。函数调用如下: impo...
  • jjddss
  • jjddss
  • 2017-06-21 14:25:51
  • 1392

opencv 玻璃镜面缺陷检测,缺陷信息标记及提取

玻璃镜面缺陷检测,包括划痕检测,点缺陷检测,直线检测等。代码程序如下: // // //#include //#include //#include //#include //using na...
  • scutjy2015
  • scutjy2015
  • 2017-06-30 19:46:31
  • 3141

缺陷分析与处理

1 首先由4个问题开始: 缺陷处理存在的通病是什么? 通病产生的原因,需要如何去面对和提高? 怎么分析日志和处理缺陷? 缺陷的后期处理? 2 听听程序猿的心声 BUG的描述不清楚,表达逻辑欠缺; 无效...
  • wanglin_lin
  • wanglin_lin
  • 2015-09-22 09:27:39
  • 1098

OpenCV凸包凸缺陷检测

左边原图,右边结果。 右图中,蓝色线为凸包,凸缺陷的起始点为黑色点,凸缺陷的起始点为绿色点,凸缺陷的最深点为红色点(即边缘点到凸包距离最大点)。 void convexityDefects(Input...
  • wukai0909
  • wukai0909
  • 2017-09-30 23:53:59
  • 885

表面缺陷检测的几种方法

1.  location + blob + feature 2.  location + differ + feature 3.  frequency domain + spatial domain ...
  • qq_20161893
  • qq_20161893
  • 2017-11-08 13:18:35
  • 520

人工智能巨大缺陷

最近在研究学习人工智能之神经网络和深度学习(Neural Network and Deep Learning) 突然发现人工智能的一个巨大缺陷 我发现现在的人工智能智能只能处理线性多维问题,对于高次...
  • i7thTool
  • i7thTool
  • 2017-03-14 13:11:36
  • 1574
收藏助手
不良信息举报
您举报文章:python处理缺陷图象返回缺陷面积数量
举报原因:
原因补充:

(最多只允许输入30个字)