如何将 OpenCV 灰度图像转换为黑白图像?我看到一个类似的问题 https://stackoverflow.com/questions/1585535/convert-rgb-to-black-white-in-opencv已经被问过,但我正在使用 OpenCV 2.3,并且建议的解决方案似乎不再有效。
我正在尝试将灰度图像转换为黑白图像,以便任何不是绝对黑色的东西都是白色的,并将其用作遮罩冲浪.检测() http://opencv.itseez.com/modules/features2d/doc/feature_detection_and_description.html?highlight=surf#cv2.SURF,为了忽略在黑色掩模区域边缘发现的关键点。
下面的 Python 几乎让我达到了目标,但是发送到 Threshold() 的阈值似乎没有任何效果。如果我将其设置为 0 或 16 或 128 或 255,结果是相同的,所有值 > 128 的像素都变成白色,而其他所有像素都变成黑色。
我究竟做错了什么?
import cv, cv2
fn = 'myfile.jpg'
im_gray = cv2.imread(fn, cv.CV_LOAD_IMAGE_GRAYSCALE)
im_gray_mat = cv.fromarray(im_gray)
im_bw = cv.CreateImage(cv.GetSize(im_gray_mat), cv.IPL_DEPTH_8U, 1);
im_bw_mat = cv.GetMat(im_bw)
threshold = 0 # 128#255# HAS NO EFFECT!?!?
cv.Threshold(im_gray_mat, im_bw_mat, threshold, 255, cv.CV_THRESH_BINARY | cv.CV_THRESH_OTSU);
cv2.imshow('', np.asarray(im_bw_mat))
cv2.waitKey()
使用新的 cv2 Python 绑定的分步答案类似于您所引用的答案:
1.读取灰度图像
import cv2
im_gray = cv2.imread('grayscale_image.png', cv2.IMREAD_GRAYSCALE)
2. 将灰度图像转换为二值图像
(thresh, im_bw) = cv2.threshold(im_gray, 128, 255, cv2.THRESH_BINARY | cv2.THRESH_OTSU)
它使用 Otsu 的方法自动从图像中确定阈值,或者如果您已经知道阈值,则可以使用:
thresh = 127
im_bw = cv2.threshold(im_gray, thresh, 255, cv2.THRESH_BINARY)[1]
3.保存到磁盘
cv2.imwrite('bw_image.png', im_bw)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)