我试图对波浪进行阈值处理,使白色背景显示为黑色,而原本黑色的波浪本身就是白色,但它似乎只会返回一个完全黑色的图像。我究竟做错了什么?
import cv2
src = cv2.imread("C:\\Users\\ksatt\\Desktop\\SoundByte\\blackwaveblackaxis (1).PNG",0)
maxValue = 255
thresh= 53
if not src is None:
th, dst = cv2.threshold(src, thresh, maxValue, cv2.THRESH_BINARY_INV)
cv2.imshow("blackwave.PNG", dst)
cv2.imwrite("blackwave.PNG", dst)
cv2.waitKey(0)
else:
print 'Image could not be read'
答案 0 :(得分:0)
如果你看一下http://docs.opencv.org/2.4/modules/imgproc/doc/miscellaneous_transformations.html#threshold,它会告诉你每个参数对函数的作用。
这里还有一个很好的教程:
http://docs.opencv.org/trunk/d7/d4d/tutorial_py_thresholding.html
Python:cv.Threshold(src,dst,threshold,maxValue,thresholdType)→ 没有 原型是否在上述API中得到进一步的扩展。
只需将代码更改为:
cv2.threshold(src,RESULT, thresh, maxValue, cv2.THRESH_BINARY_INV)
cv2.imshow("blackwave.PNG", RESULT)
答案 1 :(得分:0)
你的门槛太低了,黑纸会拿起你不想要的值。基本上,图像的对比度太低。
一个简单的解决方案是减去背景。执行此操作的简单方法是dilate()
灰度图像,这将扩大白色区域并超越黑色线条。然后,您可以将小GaussianBlur()
应用于扩散的图像,这将为您提供一个“背景”图像,您可以从原始图像中减去该图像以获得清晰的线条视图。从那里你可以得到更好的threshold()
图像,你甚至可以使用OTSU阈值来自动为你设置阈值水平。
import cv2
import numpy as np
# read image
src = cv2.imread('wave.png',0)
# create background image
bg = cv2.dilate(src, np.ones((5,5), dtype=np.uint8))
bg = cv2.GaussianBlur(bg, (5,5), 1)
# subtract out background from source
src_no_bg = 255 - cv2.absdiff(src, bg)
# threshold
maxValue = 255
thresh = 240
retval, dst = cv2.threshold(src_no_bg, thresh, maxValue, cv2.THRESH_BINARY_INV)
# automatic / OTSU threshold
retval, dst = cv2.threshold(src_no_bg, 0, maxValue, cv2.THRESH_BINARY_INV+cv2.THRESH_OTSU)
您可以看到手动阈值处理提供与OTSU相同的结果,但您不必使用OTSU的值,它会为您找到它们。这并不总是最好的方式,但有时可以很快。有关不同阈值操作的更多信息,请查看this tutorial。
答案 2 :(得分:-1)
你能发一张波浪的照片吗?你尝试过使用标准的python吗?这样的事情应该有效:
import numpy as np
import matplotlib.pyplot as plt
maxValue = 255
thresh= 53
A = np.load('file.png')
# For each pixel, see if it's above/below the threshold
for i in range(A.shape[0]): # Loop along the X direction
for j in range(A.shape[1]): # Loop along the Y direction
# Set to black the background
if A[i,j] > thresh:
A[i,j] = 0
if A[i,j] == 0:
A[i,j] = 255
或类似的东西。