如何将灰度 OpenCV 图像转换为黑白图像?我看到一个 similar question已经有人问过了,但我使用的是 OpenCV 2.3,建议的解决方案似乎不再有效。
我正在尝试将灰度图像转换为黑白,以便任何不是绝对黑色的东西都是白色的,并将其用作 surf.detect() 的蒙版, 以便忽略在黑色蒙版区域边缘找到的关键点。
下面的 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 绑定(bind)的步骤类似于您所指的答案:
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)
关于python - 将 OpenCV 图像转换为黑白图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7624765/