python - 将 OpenCV 图像转换为黑白图像

标签 python image-processing opencv computer-vision

如何将灰度 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/

相关文章:

Python 将切片作为参数传递

python - "ImportError: No module named..."导入我自己的模块时

r - 通过移动平均滑动窗口方法,使用 rollmean、filter、rollapply 或其他 R 工具平滑 2D 矩阵

c++ - OpenCV Mat 导致 SIGABRT 崩溃

python - 使用 python opencv 在网络摄像头上切换图像过滤器

opencv - Opencv编译Raspberry Pi 3 Raspbian Jessie

python - PIL 如何根据图像上绘制的文本缩放图像

python - Python 中的正则表达式替换

c++ - Windows Media Foundation:IMFSourceReader::SetCurrentMediaType 执行时间问题

linux - 将颜色校准数据写入 TIFF 或 PNG 文件