javadoc提到自适应阈值函数的签名为 我需要以某种方式自动为给定特定图像输入blockSize和C (偏移)的值。 因此,我得到了彩色图像,然后将其转换为灰度,然后将自适应阈值用作OCR的预处理步骤。 目前,我对blocksize和C的值进行了硬编码,看看是什么使我获得了更好 ...
提示:本站收集StackOverFlow近2千万问答,支持中英文搜索,鼠标放在语句上弹窗显示对应的参考中文或英文, 本站还提供 中文繁体 英文版本 中英对照 版本,有任何建议请联系yoyou2525@163.com。
我是 OpenCV 的新手,我刚刚阅读了cv2.adaptiveThreshold()
并决定尝试一下。 可悲的是,我似乎无法摆脱如此巨大的噪音。
有哪些有效的方法可以减少噪音,以便我可以绘制正确的轮廓? 什么是最佳实践,为什么?
这是片段:
import cv2 import numpy as np ##################################### winWidth = 640 winHeight = 840 brightness = 100 cap = cv2.VideoCapture(0) cap.set(3, winWidth) cap.set(4, winHeight) cap.set(10, brightness) kernel = (5, 5) ########################################### def preprocessing(frame): imgGray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY) # mask = cv2.inRange(imgHsv, lower, upper) imgBlurred = cv2.GaussianBlur(imgGray, kernel, 1) gaussC = cv2.adaptiveThreshold(imgBlurred, 255, cv2.ADAPTIVE_THRESH_GAUSSIAN_C, cv2.THRESH_BINARY_INV, 11, 2) imgDial = cv2.dilate(gaussC, kernel, iterations=3) imgErode = cv2.erode(imgDial, kernel, iterations=1) return imgDial def getcontours(imPrePro): contours, hierarchy = cv2.findContours(imPrePro, cv2.RETR_TREE, cv2.CHAIN_APPROX_NONE) for cnt in contours: cv2.drawContours(imgCon, cnt, -1, (255, 0, 0), 3) ################################################### while (cap.isOpened()): success, frame = cap.read() if success == True: frame = cv2.flip(frame, 1) imgCon = frame.copy() imPrePro = preprocessing(frame) getcontours(imPrePro) cv2.imshow("Preprocessed", imPrePro) cv2.imshow("Original", imgCon) if cv2.waitKey(1) & 0xFF == ord("q"): break
我认为最好看一下blockSize
和C
参数。
形成来源:
blockSize:用于计算像素阈值的像素邻域的大小:3、5、7 等。
C:从平均值或加权平均值中减去的常数(参见下面的详细信息)。 通常,它是正数,但也可能为零或负数。
在您的示例中,您将C
设置为 2:
gaussC = cv2.adaptiveThreshold(imgBlurred, 255, cv2.ADAPTIVE_THRESH_GAUSSIAN_C, cv2.THRESH_BINARY_INV, 11, 2)
如您所见,您需要使用blockSize
和C
参数才能从自适应阈值中获得所需的结果。
在这个问题中,我们通过增加C
参数来减少噪声。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.