如何将灰度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()
Run Code Online (Sandbox Code Playgroud) 我只是在OpenCV中做一个特征检测的例子.此示例如下所示.它给了我以下错误
module'对象没有属性'drawMatches'
我检查了OpenCV Docs,我不确定为什么会收到此错误.有谁知道为什么?
import numpy as np
import cv2
import matplotlib.pyplot as plt
img1 = cv2.imread('box.png',0) # queryImage
img2 = cv2.imread('box_in_scene.png',0) # trainImage
# Initiate SIFT detector
orb = cv2.ORB()
# find the keypoints and descriptors with SIFT
kp1, des1 = orb.detectAndCompute(img1,None)
kp2, des2 = orb.detectAndCompute(img2,None)
# create BFMatcher object
bf = cv2.BFMatcher(cv2.NORM_HAMMING, crossCheck=True)
# Match descriptors.
matches = bf.match(des1,des2)
# Draw first 10 matches.
img3 = cv2.drawMatches(img1,kp1,img2,kp2,matches[:10], flags=2)
plt.imshow(img3),plt.show()
Run Code Online (Sandbox Code Playgroud)
错误:
Traceback (most recent call last):
File "match.py", line …Run Code Online (Sandbox Code Playgroud) 我只是喜欢冒险,迈出了我的第一步,迈向计算机视觉.我试图自己实现霍夫变换,但我只是没有全面了解.我阅读了维基百科条目,甚至是原始的"使用霍夫变换检测图片中的线条和曲线",由理查德·杜达和彼得·哈特,但没有帮助.
有人可以帮助用更友好的语言向我解释吗?
geometry pattern-recognition image-processing computer-vision hough-transform
我目前正在开展一个项目,我正试图检测一些平躺在平面上的硬币(即桌子).硬币不重叠,不会被其他物体隐藏.但可能有其他物体可见,照明条件可能不完美...基本上考虑自己拍摄你的桌子上有一些硬币.
所以每个点都应该是椭圆形.由于我不知道相机的位置,椭圆的形状可能会有所不同,从圆圈(从顶部看)到扁平椭圆,取决于硬币拍摄的角度.
我的问题是,我不知道如何提取硬币,最后在它们上面放置椭圆(我正在寻找进一步的计算).
现在,我刚刚通过在OpenCV中设置阈值进行了第一次尝试,使用findContours()获取轮廓线并拟合椭圆.不幸的是,轮廓线很少给我硬币的形状(反射,光线不好......),这种方式也不是首选,因为我不希望用户设置任何阈值.
另一个想法是在该图像上使用椭圆的模板匹配方法,但由于我不知道相机的角度和椭圆的大小,我认为这不会很好...
所以我想问一下是否有人能告诉我一种方法可以解决我的问题......
有没有快速的方法从图像中提取三个硬币?计算应该在移动设备上实时进行,并且该方法对于不同或变化的灯光或背景的颜色不应过于敏感.
如果有人能给我任何关于哪种方法对我有用的提示,那会很棒...
现在我正在构建一个需要模糊整个UIView的iPhone应用程序.我怎样才能做到这一点?我已经看到了这个框架,但我认为这不适用于UIView.是否有另一种模糊UIView的方法?
更新:检查下面我更新的答案,增加与iOS 7和iOS 8的更新相关性.
我在这个区域有一个带有"点"的2D区域.我现在正试图检测点的"簇",即具有一定高密度点的区域.
有关如何优雅地检测这些区域的任何想法(或链接到有想法的文章)?
如何从BufferedImage对象获取InputStream?我试过这个,但ImageIO.createImageInputStream()总是返回NULL
BufferedImage bigImage = GraphicsUtilities.createThumbnail(ImageIO.read(file), 300);
ImageInputStream bigInputStream = ImageIO.createImageInputStream(bigImage);
Run Code Online (Sandbox Code Playgroud)
因为我可以成功地将bigImage绘制到JPanel,所以正确生成了图像缩略图.
谢谢.
我试图将图像相互比较,以确定它们是否不同.首先,我尝试对RGB值进行Pearson相关,除非图像是轻微的位移,否则它的效果也相当不错.因此,如果一个100%相同的图像,但一个有点移动,我得到一个不好的相关值.
有关更好算法的任何建议吗?
顺便说一下,我正在谈论比较数千个图片......
编辑:以下是我的照片示例(微观):
IM1:

IM2:

IM3:

im1和im2是相同但有点移位/切割,im3应该被认为是完全不同的...
编辑: 问题是通过Peter Hansen的建议解决的!效果很好!感谢所有答案!一些结果可以在这里找到 http://labtools.ipk-gatersleben.de/image%20comparison/image%20comparision.pdf
我的形式有一个ImageField.我如何强制执行文件大小最小/最大,类似于 -
image = forms.ImageField(max_size = 2MB)
Run Code Online (Sandbox Code Playgroud)
要么
image = forms.ImageField(min_size = 100k)
Run Code Online (Sandbox Code Playgroud)
谢谢.
我需要在另一个图像中剪切出文本形状的图像.我认为它最好显示在图像中.
这是一张猫的照片:

这是我要删除的文字:

生成的图像是这样的:

文本图像将始终为黑色并具有透明背景,并且生成的剪切图案也应具有透明背景.两个输入图像也将具有相同的大小.