相关疑难解决方法(0)

OpenCV C++/Obj-C:检测一张纸/方形检测

我在我的测试应用程序中成功实现了OpenCV平方检测示例,但现在需要过滤输出,因为它非常混乱 - 或者我的代码是错误的?

我对本文的四个角点感兴趣,以减少偏斜(如此)和进一步处理......

输入输出: 输入输出

原始图片:

点击

码:

double angle( cv::Point pt1, cv::Point pt2, cv::Point pt0 ) {
    double dx1 = pt1.x - pt0.x;
    double dy1 = pt1.y - pt0.y;
    double dx2 = pt2.x - pt0.x;
    double dy2 = pt2.y - pt0.y;
    return (dx1*dx2 + dy1*dy2)/sqrt((dx1*dx1 + dy1*dy1)*(dx2*dx2 + dy2*dy2) + 1e-10);
}

- (std::vector<std::vector<cv::Point> >)findSquaresInImage:(cv::Mat)_image
{
    std::vector<std::vector<cv::Point> > squares;
    cv::Mat pyr, timg, gray0(_image.size(), CV_8U), gray;
    int thresh = 50, N = 11;
    cv::pyrDown(_image, pyr, cv::Size(_image.cols/2, _image.rows/2));
    cv::pyrUp(pyr, …
Run Code Online (Sandbox Code Playgroud)

c++ opencv image-processing objective-c computer-vision

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

在一组cv :: Point上执行cv :: warpPerspective以进行伪偏移

我正在尝试对一组点进行透视变换以实现偏斜效果:

http://nuigroup.com/?ACT=28&fid=27&aid=1892_H6eNAaign4Mrnn30Au8d

我正在使用下面的图像进行测试,绿色矩形显示感兴趣的区域.

我在想,如果有可能实现,我希望使用的简单组合的效果cv::getPerspectiveTransformcv::warpPerspective.我正在分享我到目前为止所写的源代码,但它不起作用.这是结果图像:

因此,有一个vector<cv::Point>定义感兴趣的区域,但点不存储在任何特定的顺序载体内,这件事情我不能在检测过程中发生改变.无论如何,稍后,向量中的点用于定义a RotatedRect,而这又用于组装cv::Point2f src_vertices[4];,所需的变量之一cv::getPerspectiveTransform().

我对顶点及其组织方式的理解可能是其中一个问题.我还认为使用a RotatedRect不是存储ROI原始点的最佳方法,因为坐标会稍微改变以适应旋转的矩形,这并不是很酷.

#include <cv.h>
#include <highgui.h>
#include <iostream>

using namespace std;
using namespace cv;

int main(int argc, char* argv[])
{
    cv::Mat src = cv::imread(argv[1], 1);

    // After some magical procedure, these are points detect that represent …
Run Code Online (Sandbox Code Playgroud)

c++ opencv image-processing perspective skew

57
推荐指数
4
解决办法
4万
查看次数

检测带圆角的卡片边缘

嗨,目前我正在开发一个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
查看次数

从现有图像中裁剪图像

我想从现有图像中裁剪出图像.我已经拍摄了一张图像并98%使用imagemagick 在阈值上应用了单色(这在openCV中是可行的吗?)

生成的图像是这样的:

在此输入图像描述

现在从这个图像我想裁剪出另一个图像,以便最终图像看起来像这样:

在此输入图像描述

问题 如何在OpenCV中执行此操作?请注意,我想裁剪图像的唯一原因是我可以使用此答案来获取文本的一部分.如果不需要裁剪出新的图像,而只是开始专注于图像的黑色部分,那就太棒了.

c++ python opencv image-processing

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