• 之前公司软件版本是在通过调用摄像头再手动圈定仪器数字区域进行识别,现在在此基础上实现自动定位,检测出所有的矩形通过其宽高之比和面积进行筛选,部分关键代码如下

//自动定位数字区域
#include <opencv2/core/core.hpp>  
#include <opencv2/highgui/highgui.hpp>  
#include <opencv2\imgproc\imgproc.hpp>
#include <stdio.h>
#include <iostream>

using namespace cv;
using namespace std;
  
cv::Mat frame,tmp;

void Dectector(Mat frame)
{
    Mat gray_image;
    cvtColor(frame, gray_image, CV_RGB2GRAY);
    
    //滤波处理
    Mat blur_image;
    GaussianBlur(gray_image, blur_image, Size(3,3),0,0);
    //Canny边缘检测
    Mat canny_image;
    Canny(blur_image, canny_image, 100, 150, 3);
    imshow("Canny",canny_image);

//查找轮廓
    Mat contour_image;
    contour_image = canny_image.clone();
    vector<vector<Point>>contours;
    findContours(contour_image, contours, CV_RETR_LIST, CHAIN_APPROX_SIMPLE);

//绘制轮廓
    drawContours(contour_image, contours, -1, Scalar(255), 1);
    
    //矩形
    
    vector<Point> rectPoint;
    for (int i = 0;i < contours.size();i++)
    {
        //获得矩形外包围框
        Rect r = boundingRect(Mat(contours[i]));
        
        //RotatedRect r = minAreaRect(Mat(contours[i]));
        //cout << "contours" << i << "height=" << r.height << "width =" << r.width << "rate =" << ((float)r.width / r.height) << endl;
        
        //根据矩形宽高比和面积筛选矩形
        if ((float)r.width / r.height >= 1.5&& (float)r.width / r.height <= 2.2&& (float)r.width * r.height>=3000&& (float)r.width * r.height<=10000)
        {
            cout << "r.x = " << r.x << "  r.y  = " << r.y <<"rate =" << ((float)r.width / r.height) << " area = " << ((float)r.width * r.height) << endl;
            
            Point p1, p2, p3, p4;
            p1.x = r.x;
            p1.y = r.y;
            p2.x = r.x + r.width;
            p2.x = r.y;
            p3.x = r.x + r.width;
            p3.y = r.y + r.height;
            p4.x = r.x;
            p4.y = r.y + r.height;
            rectPoint.push_back(p1);
            rectPoint.push_back(p2);
            rectPoint.push_back(p3);
            rectPoint.push_back(p4);
            //画矩形
            rectangle(frame, r, Scalar(0, 0, 255), 2);
            
        }
    }
    imshow("检测",frame);
    imwrite("03.jpg",frame);
}
void main()  
{  
    VideoCapture cap(0);
    if(!cap.isOpened())
    {
        printf("error");
        return;
    }
    cap.set(CV_CAP_PROP_FRAME_WIDTH,640);
    cap.set(CV_CAP_PROP_FRAME_HEIGHT,480);
    while(1)
    {
        cap>>frame;
        flip(frame,frame,-1);
        Dectector(frame);

if(27==waitKey(30))//按ESC键退出
            break;
    }
    //cap.release();

}

  • 如图所示,红色矩形框是数字所在区域

opencv矩形轮廓查找相关推荐

  1. OpenCV的轮廓查找和填充

    OpenCV的轮廓查找有C版本和C++版本,当轮廓比较复杂的时候,例如嵌入多层轮廓,如果方法不当那么很容易会漏处理一些轮廓.本文介绍了复杂轮廓场景下的几种主要的查找轮廓和颜色填充方法. 1:cvFin ...

  2. opencv矩形轮廓顶点的具体位置确定

    一.问题的引入 opencv在图像处理方面有着非常强大的功能,当我们需要使用opencv进行一些图像的矫正工作时,我们通常需要找到原图的一些关键点,然后计算变换后的图像坐标,最后通过仿射变换或者透视变 ...

  3. 【OpenCv】图像的轮廓查找

    1 原理   边界或者轮廓可以简单认为成将连续的点(连着边界)连在一起的曲线,具有相同的颜色或者灰度.轮廓在形状分析和物体的检测和识别中很有用. 在机器视觉领域最常用的轮廓查找的算法之一是 Moore ...

  4. 基于OpencV的轮廓填充算法在3D打印机中的应用

    在这之前,我们需要了解一下SLC文件的格式,只有对格式有一点了解,我们才能做接下来的工作,首先SLC文件中是通过描述各层中的多段线来描述整个模型的,多段线之间两两相连.对单个轮廓来说,最后一点必须等于 ...

  5. opencv学习之路(25)、轮廓查找与绘制(四)——正外接矩形

    一.简介 二.外接矩形的查找绘制 1 #include "opencv2/opencv.hpp" 2 using namespace cv; 3 void main() 4 { 5 ...

  6. opencv 轮廓查找, 凸包,最小外接矩形,最小外接圆,最小外接椭圆

    本章内容: 1. 轮廓查找 2. 绘制轮廓 3. 凸包 4.最小外接矩形 5.最小外接圆 6.最小外接椭圆 1.搜索轮廓 2.绘制轮廓 输出结果 3.凸包 输出结果 4.最小外接矩形 输出结果 5.最 ...

  7. python使用opencv查找轮廓_(八)OpenCV-Python学习—轮廓查找,绘制和拟合

    针对物体轮廓,opencv还提供了一些相关的函数,来处理轮廓查找,绘制,拟合,以及计算轮廓周长和面积等,详细介绍如下: 1. 寻找和绘制轮廓 opencv的findContours()能寻找图片中的轮 ...

  8. opencv 绘制轮廓边框 多边形 圆形 矩形

    如何使用opencv 绘制轮廓边框最小包裹 多边形 圆形 矩形? 函数说明: Rect boundingRect(InputArray points) points:输入信息,可以为包含点的容器(ve ...

  9. opencv findContours()轮廓特征分析大全(求面积、周长、几何矩、质心、凸包、最小外接矩形、最小外接三角形、最小外接椭圆等)

    文章目录 前言 一.效果 二.opencv对应函数介绍 1.轮廓面积 2.轮廓周长 3.轮廓几何矩 4.轮廓的最大外接矩形 5.轮廓的凸包 6.轮廓的最小外接矩形 7.轮廓的最小外接三角形 8.轮廓的 ...

  10. openCV 轮廓查找-测量物体尺寸

    一,利用openCV的findContours轮廓查找功能,用已知物体的尺寸(比如硬币)作为参考,根据实际尺寸与像素尺寸的比列,求出图片中物体的实际大小.存在的问题有两个: 图片的阴影导致轮廓不准确, ...

最新文章

  1. linux 每日学一点《Linux架设代理服务器(2)》
  2. 2018年12月份学习总结,PMP学习总结
  3. Java反射机制:表单数据自动封装到JavaBean中【IT】
  4. Django(五)中间件
  5. 这种反爬虫手段有点意思,看我破了它!
  6. python winio_Python pywinio包_程序模块 - PyPI - Python中文网
  7. js中的相等与不等运算
  8. 05-基础widgets
  9. 软件测试的流程结构图
  10. Python语音转文字、音频切割、语音识别
  11. 【软件测试的重要性】
  12. 气象插值软件anusplin的使用
  13. c语言中浮点数取整函数,浮点取整函数
  14. IE编程1(.net)——读取IE窗口信息
  15. Bugku 分析 特殊后门(wireshark流量包分析)
  16. Tiled结合Unity做地图——Tiled2Unity
  17. ⑮霍兰德EA*型如何选专业?高考志愿填报选专业
  18. 2022护眼产品展,视力康复展,山东国际眼健康展会,护眼仪展
  19. 微信小程序播放bilibili视频
  20. 【图】上海居住证办理指南

热门文章

  1. 邱昭良:“碎片化”学习真是“一场骗局”吗?
  2. java监控命令_Java程序各种监控命令和排查方法
  3. shape (0,) 是什么意思
  4. keras实现交叉验证以及K折交叉验证
  5. python中的三元表达式
  6. MTU、MSS、TCP首部、IP首部
  7. [翻译]Templates in WPF
  8. 一文读懂:制造业头部企业如何构建经营分析数字化体系
  9. c语言算摄氏温度和绝对温度,将华氏度转换为绝对温度C语言
  10. 阿里云一级域名跳转https的二级域名配置说明(主域名跳转子域名, 不带www跳带www)