我创建了一个简单的例子来说明我正在努力做的事情:
#!/usr/bin/python
#---------------------------------------------------------------------
# imports
# >>> cv2.__version__
# '2.4.6.1'
# >>> scipy.__version__
# '0.12.0'
#---------------------------------------------------------------------
import cv2
from scipy.signal import wiener
#---------------------------------------------------------------------
# functions
#---------------------------------------------------------------------
def enhance_image(input_image):
my_im = input_image.copy()
my_im = wiener(my_im)
return my_im
#---------------------------------------------------------------------
# Main
#---------------------------------------------------------------------
filename="./data/5b2013d0-7939-48a6-94eb-045495b85343.png"
im=cv2.imread(filename)
cv2.imshow('Original',im)
gray_im = cv2.cvtColor(im, cv2.COLOR_BGR2GRAY)
cv2.imshow('Gray',gray_im)
enhanced_im=enhance_image(gray_im)
cv2.imshow('Enhanced',enhanced_im)
# this fails
(thresh, bw_im) = cv2.threshold(enhanced_im, 128, 255, cv2.THRESH_BINARY_INV | cv2.THRESH_OTSU)
cv2.imshow('Black and White',bw_im)
key = cv2.waitKey()
代码加载图像,将其转换为灰度,并使用scipy。信号
模块运行维纳算法来增强图像,之后我想将图像转换为二值图像(黑白)。当我运行上面的代码时,我得到以下错误:
OpenCV错误:在阈值文件/home/mrichey/Downloads/opencv2中的断言失败(src.type()==CV_8UC1)。4/opencv-2.4.6.1/modules/imgproc/src/thresh。cpp,第719行回溯(最后一次调用):文件“/simple\u example.py”,第37行,in(thresh,bw\u im)=cv2。阈值(增强的im,128255,cv2.THRESH_BINARY_INV | cv2.THRESH_OTSU)cv2。错误:/home/mrichey/Downloads/opencv2。4/opencv-
我对这个错误的研究使我相信,传递到阈值
函数中的图像是错误的类型,但我不知道它需要转换成什么或如何转换。
当我将gray\u im
传递到threshold
时,它工作正常。我注意到gray\u im
都是整数,但是enhanced\u im
有浮点值,所以我尝试修改我的enhanced\u image
函数:
def enhance_image(input_image):
my_im = input_image.copy()
my_im = wiener(my_im)
return my_im.astype(int)
然而,我也犯了同样的错误。
将enhanced_im
转换为threshold
的适当类型将使其正常工作。这可以通过以下方式实现:
enhanced_im = numpy.array(enhanced_im, numpy.uint8)
这是您的代码,经过修改后可以使用:
import cv2
from scipy.signal import wiener
import numpy
#---------------------------------------------------------------------
# functions
#---------------------------------------------------------------------
def enhance_image(input_image):
my_im = input_image.copy()
my_im = wiener(my_im)
return my_im
#---------------------------------------------------------------------
# Main
#---------------------------------------------------------------------
filename="/home/ryan/OpenCV/opencv-2.3.4.7/samples/cpp/baboon.jpg"
im=cv2.imread(filename)
cv2.imshow('Original',im)
gray_im = cv2.cvtColor(im, cv2.COLOR_BGR2GRAY)
cv2.imshow('Gray',gray_im)
enhanced_im=enhance_image(gray_im)
cv2.imshow('Enhanced',enhanced_im)
#print type(enhanced_im)
#enhanced_im.astype(numpy.uint8)
enhanced_im = numpy.array(enhanced_im, numpy.uint8)
#print enhanced_im
# this fails
#ret,thresh = cv2.threshold(imgray,self.t1,225, cv2.THRESH_BINARY)
thresh, bw_im = cv2.threshold(enhanced_im, 128, 255, cv2.THRESH_BINARY)
cv2.imshow('Black and White',bw_im)
key = cv2.waitKey()
问题内容: 在我的Android应用程序中。我从jpeg图像的代码中获取了二进制代码,如下所示。 该字符串s打印图像的二进制值。我的问题是如何将这种二进制格式转换为jpeg图像? 问题答案: 我不太确定你想要什么 如果要直接从流中创建-instance,则可以使用 它,然后在-instance中显示它: imageView.setImageBitmap(image); 如果要将基数2的字符串表示形
主要内容:示例使用方法将灰度图像转换为二进制值图像。以下是此方法的语法。 该方法接受以下参数 - mat - 表示输入图像的对象。 dst - 表示输出图像的对象。 thresh - 表示阈值的整数。 maxval - 一个整数,表示与和阈值类型一起使用的最大值。 type - 表示转换类型的整数代码,例如RGB到灰度。 通过将代码与值一起传递给其余参数,可以将灰度图像转换为二值图像。 示例 以下程序演示如何将
这是logcat 08-12 08:52:32.887:D/DalvikVM(774):GC_CONCURRENT释放71K,7%释放2765K/2964K,暂停23ms+15ms,总计94ms 08-12 08:52:33.497:D/gralloc_goldfish(774):检测到没有GPU仿真的仿真器。 08-12 08:52:40.698:D/DalvikVM(774):GC_CONCU
问题内容: 如何将灰度OpenCV图像转换为黑白图像?我看到已经提出了类似的问题,但是我使用的是OpenCV 2.3,建议的解决方案似乎不再起作用。 我正在尝试将灰度图像转换为黑白图像,以便不是绝对黑色的任何东西都是白色,并将其用作surf.detect()的蒙版,以便忽略在黑色蒙版区域边缘上找到的关键点。 下面的Python几乎可以解决我的问题,但是发送到Threshold()的阈值似乎没有任何
我想把openCV Mat文件转换成GDI+位图图像。我找不到任何关于如何做到这一点的信息?
问题内容: 我已经将图像插入数据库,并且我正在从数据库到服务器以及reactjs接收图像,但是在我的反应中,我接收到的图像具有二进制数据。但是我如何将二进制数据转换为图像中的反应。 问题答案: 将二进制数据转换为图像与无关,如果您拥有二进制数据,则将其转换为图像,如下所示: