import cv2 as cv

import cv2

import numpy as np

import time

from matplotlib import pyplot as plt

value = 60

value1 = 0

canny_min = 100

canny_max = 150

minlineLength = 200

maxlineGap = 10

area_threshold = 90

#用于去除杂点

def removeLittlePoint(img,threshold):

image, contours, hierarch = cv2.findContours(img, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_NONE)

for i in range(len(contours)):

area = cv2.contourArea(contours[i])

if area < threshold:

cv2.drawContours(image, [contours[i]], 0, 0, cv2.FILLED)

return image

def callback(object):

global value,value1,src2,src2_copy,src,minlineLength,maxlineGap,canny_max,canny_min,area_threshold

src2[:,:] = src2_copy[:,:]

#得到滑动条对应的值

value = cv2.getTrackbarPos('value', 'adapative')

value1 = cv2.getTrackbarPos('value1', 'adapative')

canny_min = cv2.getTrackbarPos('canny_min', 'adapative')

canny_max = cv2.getTrackbarPos('canny_max', 'adapative')

minlineLength = cv2.getTrackbarPos('minlineLength', 'adapative')

maxlineGap = cv2.getTrackbarPos('maxlineGap', 'adapative')

area_threshold = cv2.getTrackbarPos('area_threshold', 'adapative')

src = cv2.bilateralFilter(src2, 11, value, value1)

cv2.imshow("src", src)

src = cv2.cvtColor(src, cv2.COLOR_BGR2GRAY)

roi = cv2.adaptiveThreshold(src, 255, cv2.ADAPTIVE_THRESH_GAUSSIAN_C, \

cv2.THRESH_BINARY, 11, 3)

mask = np.ones((3, 1), np.uint8)

roi = cv2.morphologyEx(roi, cv2.MORPH_OPEN, mask, iterations=2)

roi = cv2.bitwise_not(roi)

roi = cv2.medianBlur(roi, 3,)

cv2.imshow('roi', roi)

roi_all = cv2.resize(roi, (round(roi.shape[1]/6), round(roi.shape[0]/6)))

cv2.imshow('roi_all', roi_all)

roi_canny = cv2.Canny(roi, canny_min, canny_max)

roi_canny = cv2.resize(roi_canny, (round(roi_canny.shape[1] ), round(roi_canny.shape[0] )))

cv2.imshow('roi_gray', roi_canny)

oshow = roi_canny.copy()

oshow = cv2.cvtColor(roi_canny, cv2.COLOR_GRAY2BGR)

draw = np.zeros((roi_canny.shape[0],roi_canny.shape[1]), dtype=np.uint8)

#霍夫直线检测,并绘出

lines = cv2.HoughLines(roi_canny, 1, np.pi / 180, 1000)

print(len(lines))

for line in lines:

rho, theta = line[0]

a = np.cos(theta)

b = np.sin(theta)

x0 = a * rho

y0 = b * rho

x1 = int(x0 + 10000 * (-b))

y1 = int(y0 + 10000 * (a))

x2 = int(x0 - 10000 * (-b))

y2 = int(y0 - 10000 * (a))

cv2.line(oshow, (x1, y1), (x2, y2), (0, 0, 255), 6,cv2.LINE_AA)

cv2.line(draw, (x1, y1), (x2, y2), 255, 6, cv2.LINE_AA)

oshow1 = cv2.resize(oshow, (round(oshow.shape[1] / 6), round(oshow.shape[0] / 6)))

cv2.imshow('oshow', oshow1)

kernel = np.ones((3, 3), np.uint8)

dilation = cv2.dilate(oshow, kernel, iterations=6)

draw = cv2.dilate(draw, kernel, iterations=6)

dilation_all = cv2.resize(dilation, (round(dilation.shape[1] / 6), round(dilation.shape[0] / 6)))

cv2.imshow('dilation_all', dilation_all)

cv2.imshow('dilation', dilation)

cv2.imshow('draw', draw)

output = cv2.bitwise_and(draw, roi)

result = roi[:, :] - output[:, :]

output1 = cv2.resize(output, (round(output.shape[1]/6), round(output.shape[0]/6)))

cv2.imshow('output', output1)

result1 = cv2.resize(result, (round(result.shape[1]/6), round(result.shape[0]/6)))

cv2.imshow('result', result1)

new_result = removeLittlePoint(result, area_threshold)

new_result1 = cv2.resize(new_result, (round(new_result.shape[1] / 6), round(new_result.shape[0] / 6)))

cv2.imshow('new_result1', new_result1)

#这个没用的

# lines = cv2.HoughLinesP(roi, 1, np.pi/180, 1, minLineLength=minlineLength, maxLineGap=maxlineGap)

# print(len(lines))

#

# for line in lines:

# x1,y1,x2,y2 = line[0]

# cv2.line(oshow,(x1,y1),(x2,y2),(255,0,0),5)

# cv2.imshow('oshow', oshow)

#Sobely = cv2.Sobel(roi, cv2.CV_64F, 0, 1)

#Sobely = cv2.convertScaleAbs(Sobely)

#cv2.imshow('sobely',Sobely)

dianpianwrong = cv.imread("E:/python_opencv_demo/dianPianTest/ELtestpicture/ELtestPicture/ok/P402202008310005.jpg")

src2 = dianpianwrong.copy()

dianpianwrong = cv2.resize(dianpianwrong, (round(dianpianwrong.shape[1]/6 ), round(dianpianwrong.shape[0]/6 )))

print("src.shape", src2.shape)

cv2.imshow("origon-picture", dianpianwrong)

src2_copy = np.zeros((src2.shape[0], src2.shape[1],3), np.uint8)

src2_copy[:, :] = src2[:, :]

cv2.namedWindow("adapative", cv2.WINDOW_AUTOSIZE)

#用于创建滑动条便于调试

cv2.createTrackbar('value', 'adapative', value, 255, callback)

cv2.createTrackbar('value1', 'adapative', value1, 255, callback)

cv2.createTrackbar('canny_min', 'adapative', canny_min, 255, callback)

cv2.createTrackbar('canny_max', 'adapative', canny_max, 255, callback)

cv2.createTrackbar('minlineLength', 'adapative', minlineLength, 255, callback)

cv2.createTrackbar('maxlineGap', 'adapative', maxlineGap, 255, callback)

cv2.createTrackbar('area_threshold', 'adapative', area_threshold, 255, callback)

cv2.waitKey(0)

原文链接:https://blog.csdn.net/weixin_44289316/article/details/109178506

python裂缝检测_通过opencv-python检测裂缝相关推荐

  1. opencv和python的区别_所有这些OpenCV Python接口之间有何不同?

    拉风的咖菲猫 OpenCV正式发布了两种类型的Python接口,cv和cv2.简历:我开始工作cv.这样,所有OpenCV数据类型都将保留下来.例如,加载时,图像的格式cvMat与C ++中的相同.对 ...

  2. python笔记图片_图像 opencv - python笔记

    默认 基础变换 模糊 锐化 色彩分层 傅里叶变换 高通低通 图像序列转换为视频 人脸识别 import opencv as cv2 img = cv2.imread('test.jpg') # imw ...

  3. python凹多边形分割_使用Opencv python从Image中裁剪凹面多边形

    Steps find region using the poly points create mask using the poly points do mask op to crop add whi ...

  4. python布尔表达式模板_使用OpenCV python从手绘逻辑门图中生成布尔表达式

    您的项目看起来很酷,所以我花了一些时间寻找解决方案.我在下面的代码.代码的结果是: OUTPUT[XNOR[NOR[AND[B,A],OR[D,C]],XOR[NOT[G],NAND[E,F]]]] ...

  5. opencv 人脸识别_人工智能-OpenCV+Python实现人脸识别(视频人脸检测)

    上期文章我们分享了opencv识别图片中的人脸,OpenCV图片人脸检测,本期我们分享一下如何从视频中检测到人脸 视频人脸检测 OpenCV打开摄像头特别简单,只需要如下一句代码 capture = ...

  6. 【yolov3目标检测】(3) opencv+yolov3 检测交通路况,附python完整代码

    各位同学好,今天和大家分享一下如何使用 opencv 调用 yolov3 模型,加载网络权重,很方便地实现 yolov3 目标检测.先放张图看效果. 使用的网上找的行车记录仪视频做测试,数据集采用CO ...

  7. dlib疲劳检测_使用OpenCv和Dlib进行打哈欠检测

    OpenCV: OpenCV是一个用于计算机视觉的库函数,最初是用c++编写的. Dlib: Dlib是一个Python库,包含了数据挖掘.数据结构.机器学习.图像处理等工具. 打哈欠检测与应用 打哈 ...

  8. python opencv显示图片一闪而过_解决Opencv+Python cv2.imshow闪退问题

    Opencv+Python cv2.imshow闪退 # 读入原始图像 origineImage = cv2.imread('./pic/6.jpeg') # 图像灰度化 # image = cv2. ...

  9. python数控机器人_科研一角|Python语言在人工智能加工中心机器人方面的应用

    原标题:科研一角|Python语言在人工智能加工中心机器人方面的应用 科研一角|Python语言在人工智能加工中心机器人方面的应用 (一)Python在智能机器人编程技术中的应用 用Python编写的 ...

  10. 怎么安装python的包_『本地python包怎么通过pyenv安装』python包本地安装教程

    python怎么安装第三方类库 pip 大多数库都可以通pip安装,安装方法为,令行窗口输入 pip install libname libname名 某些库通过pip安装不了,可能是因为没有打包上传 ...

最新文章

  1. 学长毕业日记 :本科毕业论文写成博士论文的神操作20170314
  2. EXCEL中显示年月日时分秒
  3. Web前端开发笔记——第四章 JavaScript程序设计 第三节 数据类型
  4. Docker容器安全性分析
  5. windows 笔记本连接公共wifi不弹出登录页面的处理办法
  6. springcould结合springbboot微服务 开发@^——^@ 模式讲解
  7. 帮公司人事MM做了个工资条拆分工具
  8. Mybatis批量insert报错的解决办法【the right syntax to use near '' at line...】
  9. dnsever 邮件记录
  10. ORB-SLAM2代码详解
  11. The Nicest Word(io优化)
  12. 记录一次idea启动失败问题Improperly specified VM option. To fix the problem, edit your JVM options and remove t
  13. Chrome 推荐几款小说、文案阅读免费插件(UI体验相对不错)
  14. 写给喜欢数学和不喜欢数学的朋友们
  15. IDEA设置类注解模板
  16. oschina使用pages
  17. 爬虫beautifulsoup爬取豆瓣读书数据
  18. 常用docker镜像
  19. 华为eNSP配置防火墙进入web界面
  20. R语言学习——安装R语言,安装RStudio

热门文章

  1. android gps定位误差,Android的GPS定位速度不可靠
  2. b51显微镜_1112-揭开微观世界的奥秘--显微镜发明的科学历程
  3. 魔兽争霸——《冰封王座》2007魔兽比赛背景音乐下载
  4. 使用Texmacs帮助您写格式规范统一的BLOG
  5. 2022最受欢迎开源免费CMS建站系统排行榜
  6. python pip安装报错_基于windows下pip安装python模块时报错总结
  7. 硕士论文结构分析与如何写作
  8. 007 定位明文封包call
  9. 0x和\u区别,unicode编码
  10. python数据处理-整理表格数据