相关疑难解决方法(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万
查看次数

如何执行文档自动裁剪使用相机识别图像?

我想制作一个类似凸轮扫描仪的应用程序来裁剪文档.

但我需要像我的两个图像一样的功能..

第一张图像显示相机拍摄的图像..

在此输入图像描述

第二个图像像这样识别捕获的图像部分.

在此输入图像描述

我研究得越来越多,但没有得到任何外出,所以,我在这里问,是否有任何人这样做告诉我..

谢谢

ocr android opencv crop

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

OpenCv 2.3 C - 如何隔离图像内的对象

我有一个像这样的形象:

资源

我想删除数字周围的黑色行和列.所以我希望结果如下:

产量

我试试这个:

void findX(IplImage* imgSrc,int* min, int* max){
    int i;
    int minFound=0;
    CvMat data;
    CvScalar maxVal=cvRealScalar(imgSrc->width * 255);
    CvScalar val=cvRealScalar(0);
    //For each col sum, if sum < width*255 then we find the min
    //then continue to end to search the max, if sum< width*255 then is new max
    for (i=0; i< imgSrc->width; i++){
        cvGetCol(imgSrc, &data, i);
        val= cvSum(&data);
        if(val.val[0] < maxVal.val[0]){
            *max= i;
            if(!minFound){
                *min= i;
                minFound= 1;
            }
        }
    }
}

void findY(IplImage* imgSrc,int* min, int* max){
    int …
Run Code Online (Sandbox Code Playgroud)

c c++ opencv image-processing

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

如何使用OpenCV在视频上查找对象

要跟踪视频帧上的对象,首先我从视频中提取图像帧并将这些图像保存到文件夹中.然后我应该处理这些图像以找到一个对象.实际上我不知道这是否是实用的,因为所有的算法都是一步完成的.它是否正确?

c++ opencv video-capture image-processing video-processing

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

高级方形检测(连接区域)

如果方块在图像中连接了区域,我该如何检测它们.

我测试了OpenCV C++/Obj-C中提到的方法 :高级方形检测

它运作不佳.

有什么好主意吗?

具有连接区域的正方形

import cv2
import numpy as np

def angle_cos(p0, p1, p2):
    d1, d2 = (p0-p1).astype('float'), (p2-p1).astype('float')
    return abs( np.dot(d1, d2) / np.sqrt( np.dot(d1, d1)*np.dot(d2, d2) ) )

def find_squares(img):
    squares = []
    gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
    # cv2.imshow("gray", gray)

    gaussian = cv2.GaussianBlur(gray, (5, 5), 0)

    temp,bin = cv2.threshold(gaussian, 80, 255, cv2.THRESH_BINARY)
    # cv2.imshow("bin", bin)

    contours, hierarchy = cv2.findContours(bin, cv2.RETR_CCOMP, cv2.CHAIN_APPROX_SIMPLE)

    cv2.drawContours( gray, contours, -1, (0, 255, 0), 3 )

    #cv2.imshow('contours', gray)
    for cnt …
Run Code Online (Sandbox Code Playgroud)

python opencv image-processing object-detection computer-vision

9
推荐指数
1
解决办法
8061
查看次数

opencv背景减法

我有一个背景场景的图像和前面有物体的同一场景的图像.现在我想用背景减法创建前景中对象的蒙版.两个图像都是RGB.

我已经创建了以下代码:

cv::Mat diff;
diff.create(orgImage.dims, orgImage.size, CV_8UC3);
diff = abs(orgImage-refImage);

cv::Mat mask(diff.rows, diff.cols, CV_8U, cv::Scalar(0,0,0));
//mask = (diff > 10);

for (int j=0; j<diff.rows; j++) {
    // get the address of row j
    //uchar* dataIn= diff.ptr<uchar>(j);
    //uchar* dataOut= mask.ptr<uchar>(j);
    for (int i=0; i<diff.cols; i++) {
        if(diff.at<cv::Vec3b>(j,i)[0] > 30 || diff.at<cv::Vec3b>(j,i)[1] > 30 || diff.at<cv::Vec3b>(j,i)[2] > 30)
            mask.at<uchar>(j,i) = 255;
    }
}
Run Code Online (Sandbox Code Playgroud)

我不知道我这样做是否正确?

opencv background-subtraction

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

OpenCV将Canny边缘转换为轮廓

我有一个OpenCV应用程序来自办公室内部的网络摄像头流(很多细节),我必须找到一个人工标记.标记是在白色背景的一个黑角规.我使用Canny来查找边缘和cvFindContours进行轮廓加工,然后使用aboutPolyDP和co.用于过滤和查找候选者,然后使用局部直方图进一步过滤,bla bla bla ...

这或多或少有效,但不完全是我想要的.FindContours总是返回一个闭环,即使Canny创建一个非闭合线.我得到一个轮廓走在线的两侧形成一个环.对于坎尼图像(我的标记)上封闭的边缘,我得到2个轮廓,一个在里面,和其他在外面.我不得不对这个操作有问题:

  • 我为每个标记得到2个轮廓(不是那么严重)

  • 最简单的过滤是不可用的(拒绝非闭合轮廓)

所以我的问题是:是否可以为非封闭的Canny边缘获得非闭合轮廓? 或者解决上述两个问题的标准方法是什么?

Canny是一个非常好的工具,但我需要一种方法将2D黑白图像转换为易于处理的东西.类似连接组件的东西,列出组件的步行顺序中的所有像素.所以我可以过滤循环,并将其提供给approxPolyDP.

更新:我错过了一些重要的细节:标记可以处于任何方向(它不是面向摄像机的正面,没有直角),实际上我正在做的是3D方向估计,基于标记的2D投影.

opencv image-processing

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

从vector <point2f>创建Mat

我对计算机视觉和opencv库非常陌生.

我已经做了一些谷歌搜索试图找到如何从Point2fs的矢量创建一个新的图像,并没有找到任何有效的例子.我见过vector<Point>,Mat但是当我使用这些例子时,我总是会遇到错误.

我正在从这个例子工作,任何帮助将不胜感激.

代码:我通过了occludedSquare.

   resize(occludedSquare, occludedSquare, Size(0, 0), 0.5, 0.5);

   Mat occludedSquare8u;
   cvtColor(occludedSquare, occludedSquare8u, CV_BGR2GRAY);

   //convert to a binary image. pixel values greater than 200 turn to white. otherwize black
   Mat thresh;
   threshold(occludedSquare8u, thresh, 170.0, 255.0, THRESH_BINARY);



   GaussianBlur(thresh, thresh, Size(7, 7), 2.0, 2.0);

   //Do edge detection
   Mat edges;
   Canny(thresh, edges, 45.0, 160.0, 3);

   //Do straight line detection
   vector<Vec2f> lines;
   HoughLines( edges, lines, 1.5, CV_PI/180, 50, 0, 0 );

   //imshow("thresholded", edges);


   cout << "Detected " …
Run Code Online (Sandbox Code Playgroud)

c++ opencv

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

检测白色的最佳方法是什么?

我正在尝试检测视频中的白色物体.第一步是过滤图像,使其只留下白色像素.我的第一种方法是使用HSV色彩空间然后检查高水平的VAL通道.这是代码:

//convert image to hsv
cvCvtColor( src, hsv, CV_BGR2HSV );
cvCvtPixToPlane( hsv, h_plane, s_plane, v_plane, 0 );

for(int x=0;x<srcSize.width;x++){
  for(int y=0;y<srcSize.height;y++){
    uchar * hue=&((uchar*) (h_plane->imageData+h_plane->widthStep*y))[x];
    uchar * sat=&((uchar*) (s_plane->imageData+s_plane->widthStep*y))[x];
    uchar * val=&((uchar*) (v_plane->imageData+v_plane->widthStep*y))[x];

    if((*val>170))
      *hue=255;
    else
      *hue=0;
  }
}
Run Code Online (Sandbox Code Playgroud)

将结果留在色调通道中.不幸的是,这种方法对照明非常敏感.我相信有更好的方法.有什么建议?

opencv colors image-processing

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

如何合并blob /轮廓

findContours用于斑点检测.现在我将密切和类似的blob合并在一起.

以下是一些示例图片:

在此输入图像描述 在此输入图像描述 在此输入图像描述

普通的Opencv有可能吗?

c++ opencv image-processing

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

是否有像cvHoughCircles()这样的opencv函数用于方检?

是否有任何opencv函数,如"cvHoughCircles()",可以用于圆检测程序的方检测程序,即CvSeq*circles = cvHoughCircles(),但我找不到方形检测.

c++ opencv image-processing

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

使用OpenCV和C++检测RGB颜色间隔

我想用OpenCV和C++检测视频或图像中的红色对象.有什么算法可以做到这一点?

我想比较一下颜色的关系.实际上,当亮度变化时,比率保持不变.所以我想确定感兴趣区域颜色的可接受值的间隔.

对于情况,我看红R(x,y)和G(x,y)/ R(x,y)和B(x,y)/ R(x,y).

然后,我将找到可接受值的范围:为了获得第一个想法,它从调色板图像红色中释放每个报告的最大值和最小值

我想找到这样的东西:

如果minR <= R(x,y)<= maxR且minG <= G(x,y)<= maxG minB <= B(x,y)<= maxB so couleur(x,y)= blanc else couleur( X,Y)= NOIR

opencv

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

如何找到开放式电视激光十字中心

从打开cv的相机我可以得到一个红十字(见下图),我不知道计算交叉中心坐标(x,y)的最佳方法?我们可以假设激光是红色的.

在此输入图像描述

可能我将不得不使用某种物体识别.但我需要计算它的中心,性能很重要.

有人可以帮忙吗?

我已成立了如何找到的图片,但在这种情况下,中心搜索最红的像素激光指示器(红点坐标)并不总是最红(整条生产线是红色,有时简历计算,它比中心更红).

c++ opencv

3
推荐指数
1
解决办法
3594
查看次数