标签: edge-detection

为OCR准备复杂的图像

我想识别信用卡上的数字.更糟糕的是,源图像不能保证高质量.OCR将通过神经网络实现,但这不应该是这里的主题.

当前的问题是图像预处理.由于信用卡可以具有背景和其他复杂图形,因此文本不像扫描文档那样清晰.我用边缘检测(Canny Edge,Sobel)进行了实验,但并没有那么成功.同时计算灰度图像和模糊图像之间的差异(如OCR图像处理中的删除背景颜色所述)不会导致OCRable结果.

我认为大多数方法都失败了,因为特定数字与其背景之间的对比不够强.可能需要将图像分割成块并为每个块找到最佳的预处理解决方案?

您对如何将源转换为可读二进制图像有任何建议吗?边缘检测是要走的路还是我应该坚持基本的颜色阈值?

这是一个灰度阈值方法的示例(我显然对结果不满意):

原始图片:

原始图像

灰度图像:

灰度图像

阈值图像:

阈值图像

感谢任何建议,Valentin

ocr image-processing edge-detection

12
推荐指数
2
解决办法
4840
查看次数

检测带圆角的卡片边缘

嗨,目前我正在开发一个OCR阅读应用程序,我已成功地使用AVFoundation框架捕获卡片图像.

下一步,我需要找出卡的边缘,以便我可以从主捕获的图像中裁剪卡片图像,然后我可以将其发送到OCR引擎进行处理.

现在的主要问题是找到卡的边缘,我正在使用下面的代码(取自另一个开源项目),该代码使用OpenCV用于此目的.如果卡是纯矩形卡或纸,它工作正常.但是当我使用圆角卡(例如驾驶执照)时,它无法检测到.另外我在OpenCV上没有太多的专业知识,任何人都可以帮我解决这个问题吗?

- (void)detectEdges
{
    cv::Mat original = [MAOpenCV cvMatFromUIImage:_adjustedImage];
    CGSize targetSize = _sourceImageView.contentSize;
    cv::resize(original, original, cvSize(targetSize.width, targetSize.height));

    cv::vector<cv::vector<cv::Point>>squares;
    cv::vector<cv::Point> largest_square;

    find_squares(original, squares);
    find_largest_square(squares, largest_square);

    if (largest_square.size() == 4)
    {

        // Manually sorting points, needs major improvement. Sorry.

        NSMutableArray *points = [NSMutableArray array];
        NSMutableDictionary *sortedPoints = [NSMutableDictionary dictionary];

        for (int i = 0; i < 4; i++)
        {
            NSDictionary *dict = [NSDictionary dictionaryWithObjectsAndKeys:[NSValue valueWithCGPoint:CGPointMake(largest_square[i].x, largest_square[i].y)], @"point" , [NSNumber numberWithInt:(largest_square[i].x + largest_square[i].y)], @"value", nil];
            [points addObject:dict];
        }

        int min = …
Run Code Online (Sandbox Code Playgroud)

opencv avfoundation edge-detection uiimage ios

12
推荐指数
1
解决办法
7943
查看次数

在OpenCV中关闭轮廓曲线

我正在使用OpenCV(Canny + findCountours)来查找对象的外部轮廓.绘制的曲线通常几乎(但不是完全)是闭合的.我想关闭它 - 找到它所包含的区域.

我该怎么做呢?

事情考虑:

  • 扩张 - 我见过的例子在Canny之后显示了这一点,虽然在我看来,在findContours之后这样做更有意义
  • 凸壳 - 可能会起作用,虽然我真的想完成曲线
  • 形状简化 - 相关,但不完全是我想要的

curve opencv contour edge-detection

12
推荐指数
1
解决办法
5478
查看次数

OpenCV 中的 Canny 可以同时处理灰度和彩色图像吗?

我对一些问题Canny边缘检测的OpenCV

这是我试过的代码。

def auto_canny(image, sigma=0.33):
    v = np.median(image)
    lower = int(max(0, (1.0 - sigma) * v))
    upper = int(min(255, (1.0 + sigma) * v))
    edged = cv2.Canny(image, lower, upper)
Run Code Online (Sandbox Code Playgroud)

然后,

##### first situation #####
img = cv2.imread('mango.jpg')
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
auto = auto_canny(gray)
cv2.imwrite('mango_gray_edge.jpg', auto)
Run Code Online (Sandbox Code Playgroud)

在这种情况下,我得到了这样的图像: 在此处输入图片说明

##### second situation #####
img = cv2.imread('mango.jpg')
auto = auto_canny(img)
cv2.imwrite('mango_color_edge.jpg', auto)
Run Code Online (Sandbox Code Playgroud)

在这种情况下,我得到了这样的图像: 在此处输入图片说明

这是原始图像:

第一种情况和第二种情况的区别在于我是否将彩色图像转换为灰度。但是,我对此感到困惑。因为,

在第一种情况下,我将图像转换为灰度,因此图像具有单个通道。而在第二种情况下,图像仍然具有三个通道。

当我没有将其转换为灰度时,边缘会好得多,就像在第二种情况下一样。

所以我的问题是,

  1. OpenCV 中的 Canny 函数是否包括将图像转换为灰度的方法?我的意思是,我需要在使用之前将图像转换为灰度cv2.Canny()吗?

  2. Canny 如何同时处理单通道(第一种情况转换为灰度)和三通道(原始图像如第二种情况)图像?

  3. Canny实际上是如何工作的?Canny …

python opencv computer-vision edge-detection canny-operator

12
推荐指数
1
解决办法
8819
查看次数

使用scipy应用Sobel滤波器

我正在尝试在图像上应用Sobel滤镜以使用scipy来检测边缘.我在Windows 7旗舰版(64位)上使用Python 3.2(64位)和scipy 0.9.0.目前我的代码如下:

import scipy
from scipy import ndimage

im = scipy.misc.imread('bike.jpg')
processed = ndimage.sobel(im, 0)
scipy.misc.imsave('sobel.jpg', processed)
Run Code Online (Sandbox Code Playgroud)

我不知道我做错了什么,但处理过的图像看起来并不像它应该做的那样.图像'bike.jpg'是灰度(模式'L'而非'RGB')图像,因此每个像素只有一个与之关联的值.

不幸的是我还没有在这里发布图片(没有足够的声誉),但我提供了以下链接:

原始图像(bike.jpg):http://s2.postimage.org/64q8w613j/bike.jpg

Scipy Filtered(sobel.jpg):http://s2.postimage.org/64qajpdlb/sobel.jpg

预期产出:http: //s1.postimage.org/5vexz7kdr/normal_sobel.jpg

我显然在某个地方出错了!有人可以告诉我在哪里.谢谢.

python scipy edge-detection

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

Python实现的高斯边缘检测拉普拉斯

我正在寻找高斯边缘检测拉普拉斯的等效实现.

在matlab中我们使用以下函数

   [BW,threshold] = edge(I,'log',...)
Run Code Online (Sandbox Code Playgroud)

在python中存在用于计算高斯拉普拉斯函数的函数.它没有明确地给予边缘.

  scipy.ndimage.filters.gaussian_laplace
Run Code Online (Sandbox Code Playgroud)

任何指向在线实现或代码的指针

谢谢

python image-processing edge-detection imagefilter laplacianofgaussian

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

边缘检测技术

有谁知道边缘检测算法中Prewitt,Sobel和Laplacian算子之间的差异是什么?

有些人比其他人好吗?

在不同情况下使用不同的运算符吗?

computer-vision edge-detection

10
推荐指数
1
解决办法
7502
查看次数

如何在OpenCv中探测太空中的太阳?

我需要从太空中探测太阳.

这些是输入图像的示例:

我在Morphologic过滤后得到了这样的结果(open两次操作)

这是此处理的算法代码:

// Color to Gray
cvCvtColor(image, gray, CV_RGB2GRAY);

// color threshold
cvThreshold(gray,gray,150,255,CV_THRESH_BINARY);

// Morphologic open for 2 times
cvMorphologyEx( gray, dst, NULL, CV_SHAPE_RECT, CV_MOP_OPEN, 2);
Run Code Online (Sandbox Code Playgroud)

对于这么简单的任务,处理不是太重了吗?如何找到太阳的中心?如果我找到白点,我会发现大地球的白点(第一个示例图像上的左上角)

请告诉我,我的进一步行动是为了探测太阳.

更新1:

尝试centroid按公式获取算法:{x,y} = {M10/M00, M01/M00}

CvMoments moments;
cvMoments(dst, &moments, 1);
double m00, m10, m01;

m00 = cvGetSpatialMoment(&moments, 0,0);
m10 = cvGetSpatialMoment(&moments, 1,0);
m01 = cvGetSpatialMoment(&moments, 0,1);

// calculating centroid
float centroid_x = m10/m00;
float centroid_y = m01/m00;

    cvCircle( image, 
              cvPoint(cvRound(centroid_x), cvRound(centroid_y)), 
              50, CV_RGB(125,125,0), 4, 8,0); …
Run Code Online (Sandbox Code Playgroud)

c++ opencv edge-detection

10
推荐指数
1
解决办法
1万
查看次数

在OpenCV中进行边缘检测后找到最佳感兴趣区域

我想将OCR应用于墙上7段显示的一些图片.我的策略如下:

  1. 隐藏Img到灰度
  2. 模糊img以减少假边缘
  3. 将img阈值化为二进制img
  4. 应用Canny Edge检测
  5. 根据数字轮廓给出的模式设置感兴趣区域(ROI)
  6. 缩放ROI和模板匹配该区域

如何设置ROI以便我的程序不必在整个图像中查找模板?我想根据找到的边数设置我的投资回报率,或者如果有人可以帮助我,那么更有用的东西.

我正在研究Cascade Classification和Haar,但我不知道如何将它应用到我的问题中.

这是经过预处理和边缘检测后的图像: 预处理和边缘检测后的图像

原始图像

在此输入图像描述

c++ opencv image-processing computer-vision edge-detection

10
推荐指数
1
解决办法
3014
查看次数

如何在Heroku上使用最新版本的Imagemagick?

Heroku Cedar-14堆栈目前运行的ImageMagick版本(6.7.7-10)已有近一年的历史:

Running `identify -version` attached to terminal... up, run.8227
Version: ImageMagick 6.7.7-10 2014-03-06 Q16 http://www.imagemagick.org
Copyright: Copyright (C) 1999-2012 ImageMagick Studio LLC
Features: OpenMP
Run Code Online (Sandbox Code Playgroud)

我想使用-canny在图像中执行边缘检测的选项,但这只是在ImageMagick的更高版本中引入的.

Heroku上唯一可用的ImageMagick构建包不适用于Cedar-14堆栈:https: //github.com/mcollina/heroku-buildpack-imagemagick

有没有办法在Heroku上使用ImageMagick v6.8.9-0或更高版本?

提前致谢!

ruby-on-rails imagemagick heroku edge-detection

10
推荐指数
2
解决办法
9137
查看次数