标签: image-recognition

图像到条码识别

我知道这已经在 stackoverflow 上讨论过几次,但我找不到足够的答案。对于一个项目,我正在寻找可以从输入图像中识别条形码数字的最好的软件/api/库。它将用于手机(iphone、windows mobile、android 等),因此它应该擅长从不良角度、模糊图像和此类恶劣条件下捕捉条码。开源或商业化并不重要,只要它做得好(确实开源会更好:))

如果您对此主题有任何经验,请与我们分享:)

谢谢

mobile barcode image-recognition barcode-scanner

5
推荐指数
1
解决办法
5520
查看次数

国际象棋棋盘推荐模式识别技术

我正在尝试做一个应用程序,除其他外,它能够从屏幕截图中识别计算机屏幕上的国际象棋位置。我对图像处理技术的经验非常有限,不希望投入大量时间来研究这个,因为这只是我的一个宠物项目。

任何人都可以向我推荐一种或多种可以给我带来好的结果的图像处理技术吗?

条件是:

  • 图像总是清晰干净,没有噪音,光线条件差等(因为它是截图)
  • 我预计在每秒处理 1 张图像时对计算机性能的影响非常小
  • 我想到了两种模式来启动这个过程:
    • 将棋子的形状输入程序(以便它知道皇后、国王等的样子)
    • 只需向程序提供包含启动位置的初始图像,程序可以(在识别棋盘位置后)从中挑选每个棋子
  • 这个过程应该比较容易理解,因为我还没有很好地掌握图像处理技术(还)
  • 我对使用任何特定技术不感兴趣,因此与技术无关的文档将是理想的(C/C++、C#、Java 示例也可以)。

感谢您花时间阅读本文,我希望得到一些好的答案。

pattern-recognition chess image-processing image-recognition

5
推荐指数
1
解决办法
3111
查看次数

如何以编程方式删除黑色网格?

我的想法是:

  • 1.0. [未解决,硬图像检测] 将图像分成正方形并去除边框,当然还有其他技术!

  • 1.1. [未解决] Imagemagick:裁剪(这里有说明),去除某些边框——这可能需要很多时间来定位网格,图像检测问题(这里比较白/黑)——或者可能有一些魔术棒样式的过滤器。

  • 1.2. [未解决] Python:你可能需要这个from PIL import Image

显然,Gimp 的橡皮擦是解决这个问题的错误方法,因为它速度慢且容易出错。您将如何以编程方式删除网格?

在此处输入图片说明

PS这个问题在Graphics.SE休闲讨论这里包含多个物理和机械黑客。

python graphics imagemagick image-recognition extraction

5
推荐指数
1
解决办法
2249
查看次数

Android图像识别API /库(不在云端)

我搜索了一个很好的Android图像识别API /库.我发现了一些,但它们不适合我,因为我们必须将图像放在他们的服务器上.我想要一个允许您在自己的服务器上搜索的内容.

我的数据库中有一个产品列表(名称+图像).我希望允许用户使用他的手机拍照并获取相关产品图片.

编辑

搜索之后,我还没有找到一个完全符合我需求的库(在你自己的服务器上搜索).但我发现一个与其他人相比是完美的(用json将元数据附加到图像上,为项目上传多个图像):Kooaba.不幸的是,Kooaba没有Android库.如果你能推荐像Kooaba这样的东西,那就太棒了.

android image-processing image-recognition

5
推荐指数
2
解决办法
2万
查看次数

Python OpenCV - 无法检测到微小的"漏洞"(圆圈)

我试图在图纸中检测"洞",也就是说,它们不是圆圈,它们的大小各不相同.图像总是黑白的.只是试图解决这个问题,我从Python文档中拿了一个例子:

import cv2
from cv2 import *
import numpy as np

img = cv2.imread('hole_test.jpg',0)
img = cv2.medianBlur(img,5)
cimg = cv2.cvtColor(img,cv2.COLOR_GRAY2BGR)

circles = cv2.HoughCircles(img,cv2.cv.CV_HOUGH_GRADIENT,1,5,param1=200,param2=100,minRadius=0,maxRadius=0)

circles = np.uint16(np.around(circles))
for i in circles[0,:]:
    # pinpoint hole
    cv2.circle(cimg,(i[0],i[1]),2,(0,0,255),3)     
cv2.imshow('holes detected',cimg)
cv2.waitKey(0)
cv2.destroyAllWindows()
Run Code Online (Sandbox Code Playgroud)

检测到的孔很少而且很远.有什么我可以做的来提高这个例子的准确性,或者这不是实现这个目标的最佳方法吗?

这是一个示例图像,只是为了显示我想要找到的"洞"的各种尺寸/形状.

示例图片

示例2按要求

示例2按要求:

python opencv numpy image-recognition

5
推荐指数
1
解决办法
1652
查看次数

如何检测图像是纹理还是基于图案的图像?

我有一个关于计算机视觉的问题; 似乎是一个普遍的问题,但无论如何,只是想知道你是否有线索.我想知道是否有一种有效的方法来区分纹理图像(或具有重复模式的照片)之间的什么,比如真实的照片?模式可以具有精确的重复,或者只是具有主要的相似性.实际上我试图看到给定一个图像,如果有可能检测到它是纹理或基于图案的图像,那实时可能?

例如,这三个在我们的上下文中被视为纹理:

http://www.bigchrisart.com/sites/default/files/video/TR_Texture_RockWall.jpg http://www.colourbox.com/preview/4440275-144135-seamless-geometric-op-art-texture.jpg

谢谢!

textures image-processing image-recognition computer-vision

5
推荐指数
1
解决办法
799
查看次数

使用BRISK检测器/描述符OpenCV的性能问题

当我在OpenCV中使用BRISK进行特征检测和描述时,我遇到了性能问题.

基本上我尝试匹配从这个图像得到的所有描述符:在此输入图像描述

我使用基于flann匹配器的LSH算法和BRISK进行特征检测和描述,从图像数据库中获取所有描述符.

我的图像数据库由242个图像组成.在该242个图像中,存在与在上述"复杂"图像查询中分别拍摄的每个对象相对应的三个图像.

以下是用于BRISK检测的参数(默认opencv参数):Treshold:30,Octaves:4,Pattern scale:1.0.

在使用最佳匹配技术进行flann匹配之后(图像查询中的每个描述符与数据库描述符集中最近的邻域相关联),我的算法输出按匹配百分比排序的数据库图像列表.以下是四个第一个结果:

  1. 与数据库中的螺栓对应的图像:4个匹配/ 15个检测到的关键点=>匹配百分比:26.7%.
  2. 对应于数据库中瓶子的图像有4个匹配/ 15个检测到的关键点=>匹配百分比:26.7%.
  3. 与数据库中的螺栓对应的图像有10个匹配/ 59个检测到的关键点=>匹配百分比:16.9%.
  4. 对应于图像查询中不存在的对象的图像:1匹配/ 16个检测到的关键点=>匹配百分比:16.7%.

我使用ORB作为特征检测和描述来比较这些结果.以下是使用的参数:特征数量:2000,比例因子:1.2,金字塔等级数量:8.

以下是我得到的结果:

  1. 与数据库中的螺栓对应的图像:576匹配/ 752检测到的关键点=>匹配百分比:76.6%.
  2. 与数据库中的瓶子对应的图像具有111个匹配/ 189个检测到的关键点=>匹配百分比:58.7%.
  3. 与数据库中的笔相对应的图像具有124个匹配/ 293个检测到的关键点=>匹配百分比:42.3%.
  4. 对应于图像查询中不存在的对象的图像:2个匹配/ 66个检测到的关键点=>匹配百分比:3%.

正如您所看到的,ORB的结果要好得多.首先,在数据库中的每个图像上检测到更多的关键点,并且匹配的百分比对于好的对象明显更好.此外,良好对象的匹配百分比与错误对象的匹配百分比之间的差距更为显着.

我想知道为什么BRISK探测器检测到的关键点比ORB探测器少得多.我已经做了不同的测试来弄清楚如何用BRISK探测器探测更多的关键点(降低阈值,减少八度数).我确实可以检测到更多的关键点,但与ORB检测器的差异仍然非常重要.你知道为什么BRISK探测器有这样的行为吗?

我的OpenCV版本是2.4.8,但我根据这些声明尝试了2.4.4和2.4.9版本的BRISK检测部分:

http://code.opencv.org/issues/2491BRISK特征检测器检测到零关键点而没有改进.

我还尝试将ORB检测器与BRISK描述相结合.匹配结果优于第一种方法(完全BRISK),但比第二种方法(完整ORB)更差:

  1. 与数据库中的螺栓对应的图像:529匹配/ 708检测到的关键点=>匹配百分比:74.7%.
  2. 与数据库中的瓶子对应的图像具有69个匹配/ 134个检测到的关键点=>匹配百分比:51.5%.
  3. 与数据库中的笔相对应的图像匹配93/247检测到的关键点=>匹配百分比:37.6%.
  4. 对应于图像查询中不存在的对象的图像:5个匹配/ 50个检测到的关键点=>匹配百分比:10%.

请注意,在方法2和方法3中,每个图像上检测到的关键点数量并不相同.实际上,当我在测试图像上运行此代码时(此处为螺栓图像):

// BRISK parameters
int Threshl=30;
int Octaves=4;
float PatternScales=1.0f;

// ORB parameters
int nFeatures=2000;
float scaleFactor=1.2f;
int nLevels=8;


BRISK  BRISKD(Threshl, Octaves, PatternScales);
ORB ORBD(nFeatures, scaleFactor, nLevels);

vector<KeyPoint> …
Run Code Online (Sandbox Code Playgroud)

opencv image-recognition brisk keypoint orb

5
推荐指数
1
解决办法
4634
查看次数

5
推荐指数
2
解决办法
8102
查看次数

匹配图像的特定元素;已知形状OpenCV C ++

在没有回答这个问题之后,我最终遇到了一些有趣的看起来可能的解决方案:

从乐百氏匹配器这个职位,以及从坎尼探测器这篇文章

设置好Canny Edge Detector,参考其文档并实现Robust Matcher我链接的第一页中所示的内容之后,我获得了一些徽标/衣服图片,并且将两者结合起来取得了不错的成绩:

徽标的图片与上面印有该徽标的一件衣物的图片匹配

但是在其他非常相似的情况下,它关闭了:

与“完全相同”设计相同的不同徽标图像,与上述服装图像相同。

这让我感到奇怪,是否有一种方法可以匹配图像上定义给定图像某些区域的几个特定点?

因此,不是让图像读入然后进行的所有匹配,而是keypoints丢弃“坏” keypoints等。是否有可能让系统知道一个keypoint相对于另一个的位置,然后丢弃一个图像上正确的匹配彼此相邻,但彼此的位置完全不同吗?

(如左图所示,淡蓝色和宝蓝色“匹配”彼此相邻,但在右图的完全分开的部分中匹配)

编辑

对于米卡

在此处输入图片说明

“矩形”绘制在(在油漆中添加的)白盒的中心。

cv::Mat ransacTest(const std::vector<cv::DMatch>& matches, const std::vector<cv::KeyPoint>& trainKeypoints, const std::vector<cv::KeyPoint>& testKeypoints, std::vector<cv::DMatch>& outMatches){
// Convert keypoints into Point2f
std::vector<cv::Point2f> points1, points2;
cv::Mat fundemental;
for (std::vector<cv::DMatch>::const_iterator it= matches.begin(); it!= matches.end(); ++it){
    // Get the position of left keypoints
    float x= trainKeypoints[it->queryIdx].pt.x;
    float y= trainKeypoints[it->queryIdx].pt.y;
    points1.push_back(cv::Point2f(x,y));
    // Get the position of …
Run Code Online (Sandbox Code Playgroud)

c++ opencv image-recognition keypoint canny-operator

5
推荐指数
0
解决办法
3282
查看次数

在opencv中从HSV查找颜色

我需要使用OpenCV在图像中找到最新颜色。我引用了https://docs.opencv.org/2.4/modules/imgproc/doc/histograms.html?highlight=calchist,当我运行该代码时,我得到的HS直方图如下图所示。如何从该直方图中辨别出当前颜色?有人可以告诉我如何使用HSV的直方图在图像中获得最当前的颜色吗?(我正在使用C ++)

这个

c++ opencv image-recognition histogram hsv

5
推荐指数
1
解决办法
1373
查看次数