当前位置: 首页 > 面试题库 >

将OpenCV图像转换为黑白图像

锺宜
2023-03-14
问题内容

如何将灰度OpenCV图像转换为黑白图像?我看到已经提出了类似的问题,但是我使用的是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绑定,与您所引用的答案类似的分步答案:

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)


 类似资料:
  • “黑白”调整可让您将彩色图像转换为灰度图像,同时保持对各颜色的转换方式的完全控制。也可以通过对图像应用色调来为灰度着色,例如创建棕褐色效果。 执行下列操作之一: 单击“调整”面板中的“黑白”图标 。 选取“图层”>“新建调整图层”>“黑白”。在“新建图层”对话框中,键入调整图层的名称,然后单击“确定”。 Photoshop 会应用默认的灰度转换。 注意:也可以选择“图像”>“调整”>“黑白”。但是

  • 问题内容: 你好,我正在将图像从彩色转换为纯黑白,结果是深色图像。我没有原因。以下是我的代码,它受SO上其他代码的启发。任何指导都会有所帮助。 我没有弄错我在做什么。使用任何其他开放源代码库的任何其他想法都可以。 工作::::: 问题答案: 您实际上并没有将彩色图像转换为黑白图像。您正在创建与空白图片相同大小的新空白图片。您实际上需要做一些处理旧图像的操作。

  • 我想把openCV Mat文件转换成GDI+位图图像。我找不到任何关于如何做到这一点的信息?

  • 问题内容: 我正在尝试将图像从转换为格式。我正在使用。这是到目前为止我一直尝试的。 但我认为图像未转换为CV格式。窗口向我显示了一个大的棕色图像。将图像从转换为格式时,我在哪里出错? 另外,为什么我需要输入访问功能? 问题答案: 用这个:

  • 这个问题与这个问题相关:<代码>如何消除数独方块中的凸性缺陷 我试图在Mathematica中将nikie的答案实现到OpenCV Python中。但我被困在程序的最后一步。 IE我得到了所有的交叉点在正方形如下: 现在,我想将其转换为一个完美的正方形(450450),如下所示: (不要介意两幅图像的亮度差异)。 问题:如何在OpenCV Python中做到这一点?我正在使用cv2版本。

  • 问题内容: 有没有一种方法可以将JPanel(尚未显示)转换为BufferedImage? 谢谢, 杰夫 问题答案: 在BufferedImage中,您可以创建一个图形对象,可用于在JPanel上调用画图,如下所示: 您可能需要确保首先设置面板的尺寸。