opencv边界识别,输入是一个传送带上的物体,通过识别边界判断是哪个物体。方法还不是特别完善,判断物体的时候其实应该用周长和面积的比,但是已经没有问题了

#include<iostream>

#include<opencv2\core\core.hpp>
#include<opencv2\highgui\highgui.hpp>
#include<opencv2\imgproc\imgproc.hpp>
#include<opencv2\video\background_segm.hpp>
#include "opencv2/imgproc.hpp"
#include "opencv2/videoio.hpp"
#include "opencv2/highgui.hpp"
#include "opencv2/video/background_segm.hpp"
#include <stdio.h>
#include <string>
//(maskArct<500&&maskArct>400&&areat<4000&&areat>3500)||

using namespace cv;
using namespace std;

Mat MotionSeg(VideoCapture  & v,VideoCapture  & v2){
Mat Frame, fgMask, bg, bfgMask, sfgMask;
int FrameNum = 0;

if (!v.isOpened()) {
printf("Reading video failed!\n");
//return false;
}

Ptr<BackgroundSubtractorMOG2> bgSub = createBackgroundSubtractorMOG2(); //Define background minus object and initialization

while (v.read(Frame)) {
double maskArct=0;
double areat=0;
FrameNum++;
bgSub->apply(Frame, fgMask, 0.005);
bgSub->getBackgroundImage(bg); //get background image
blur(fgMask, sfgMask, Size(3, 3)); //smooth the foreground video
threshold(sfgMask, bfgMask, 127.5, 255, cv::THRESH_BINARY); //binary the foreground video
//display
imshow("Foreground mask", bfgMask);
Mat mask[3];
vector<vector<Point> > contours;
   vector<Vec4i> hierarchy;
   split(bfgMask,mask);
   findContours(mask[0],contours,hierarchy,CV_RETR_CCOMP, CV_CHAIN_APPROX_NONE);
   for (int i = 0; i < (int)contours.size(); i++)  {
    double maskArc=arcLength(contours[i], true);

if (maskArc>maskArct){
    maskArct=maskArc;
    }

}
   for (int i = 0; i < (int)contours.size(); i++) {
    double area = contourArea(contours[i]);

if(area>areat){
    areat=area;
    }
   }
   if(FrameNum>30&&areat>3500){
   if (maskArct<400&&maskArct>350&&areat>8500&&areat<10000){
    cout<<"This is a nut"<<endl;
   }
   else if((maskArct<620&&maskArct>550&&areat<9500&&areat>7900)&&!((maskArct*maskArct/areat>55)&&(maskArct*maskArct/areat<60))){
    cout<<"This is prong"<<endl;

}
   else if(maskArct<250&&maskArct>200&&areat<5500&&areat>4000){
    cout<<"this is a peg"<<endl;
   }
   else if((maskArct*maskArct/areat>58)&&(maskArct*maskArct/areat<62)&&areat<6000&&areat>5000){
    cout<<"this is a pipe"<<endl;
   }
   else if (maskArct<500&&maskArct>400&&areat<8000&&areat>6000){
    cout<<"this is a q"<<endl;
   }
   else if (maskArct<300&&maskArct>250&&areat<6000&&areat>5000){
    cout<<"this is a washer"<<endl;
    }
   }
imshow("Original video",Frame);
waitKey(10);

}
cout << "There are " << FrameNum << " frames in this video" << endl;
return bfgMask;
}

int main() {
VideoCapture video("C:\\Users\\Administrator\\Desktop\\belt2_fg.wmv");
VideoCapture video2("C:\\Users\\Administrator\\Desktop\\belt2_bg.wmv");
Mat MSresult;
Mat nut11[3];
MSresult = MotionSeg(video,video2);

/*Mat Frame, fgMask, bg, bfgMask, sfgMask;

int FrameNum = 0;

if (!video.isOpened()) {
printf("Reading vedio failed!\n");
return false;
}

Ptr<BackgroundSubtractorMOG2> bgSub = createBackgroundSubtractorMOG2(); //Define background minus object and initialization

while (video.read(Frame)) {
FrameNum++;
bgSub->apply(Frame, fgMask, 0.005);
bgSub->getBackgroundImage(bg); //get background image
blur(fgMask, sfgMask, Size(3, 3)); //smooth the foreground video
threshold(sfgMask, bfgMask, 127.5, 255, cv::THRESH_BINARY); //binary the foreground video

//display
imshow("Foreground mask", bfgMask);
imshow("Original video",Frame);
waitKey(10);

}
cout << "There are " << FrameNum << "frames in this video" << endl;*/
/*Mat nut1=imread("C:\\Users\\Administrator\\Desktop\\lab2\\washer3.bmp");
if(!nut1.data) {cout<<"Can't find image!";return -1;}
vector<vector<Point> > contours;
vector<Vec4i> hierarchy;
split(nut1,nut11);
findContours(nut11[0],contours,hierarchy,CV_RETR_CCOMP, CV_CHAIN_APPROX_NONE);
    cout<<"arclength is "<<endl;
for (int i = 0; i < (int)contours.size(); i++)  {
double nut1Arc=arcLength(contours[i], true);
    cout<<nut1Arc<<endl;
}
cout<<"area is "<<endl;
double area = contourArea(contours[0]);
double area1 = contourArea(contours[1]);
//double area2 = contourArea(contours[2]);
    cout<<area<<","<<area1<<endl;
Mat contoursnut1(nut11[0].rows,nut11[0].cols,CV_8U,Scalar(255));

drawContours(contoursnut1,contours,0,Scalar(0),3);
drawContours(contoursnut1,contours,1,Scalar(0),3);
drawContours(contoursnut1,contours,2,Scalar(0),3);

imshow("contoursnut1", contoursnut1);
waitKey(0);*/
    return 0;

}

opencv边界识别相关推荐

  1. OpenCV 人脸识别 源代码

    请直接查看原文 OpenCV 人脸识别 源代码 https://hotdog29.com/?p=553 在 2019年7月6日 上张贴 由 hotdog发表回复 opencv 人脸识别 在本教程中,您 ...

  2. PyTorch + openCV 车牌识别(一)

    PyTorch + openCV 车牌识别(一) 注意 利用cv识别车牌并切割字符 注意 本项目仅是初学者学习pytorch过程中随手写的,有些地方不够严谨请谅解,仅供参考 利用cv识别车牌并切割字符 ...

  3. python opencv 文字识别_文本识别 使用 Tesseract 进行 OpenCV OCR 和 文本识别

    文本识别 用 Tesseract 进行 OpenCV OCR 和 文本识 在本教程中,您将学习如何应用OpenCV OCR(光学字符识别).我们将使用OpenCV,Python和Tesseract 执 ...

  4. opencv车牌识别入门资料汇总

    使用OpenCV和C++实现的车牌识别系统. http://download.csdn.net/detail/u014743238/7204477 使用VC++6.0做开发工具, 采用简单的SDI框架 ...

  5. opencv 全志_移植opencv人脸识别到全志A10开发板上 +linux3.0内核

    移植opencv人脸识别 libz:    zlib-1.2.3 libjpeg:   jpegsrc.v6b libpng:   libpng-1.2.18 libyasm:   yasm-0.7. ...

  6. OpenCV字母识别letter recognition的实例(附完整代码)

    OpenCV字母识别letter recognition的实例 OpenCV字母识别letter recognition的实例 OpenCV字母识别letter recognition的实例 #inc ...

  7. OpenCV条形码识别

    OpenCV条形码识别 条形码识别 目标 基本 EAN 13 条码检测器 初始化 探测 解码 结果 原始图片 detectAndDecode的结果 条形码识别 目标 在这一章当中, 我们将熟悉Open ...

  8. python人脸照片分类_Python OpenCV 人脸识别(一)

    前面介绍了Numpy模块,下面再介绍一个OpenCV模块,就基于这两个库看一下当下很火的人工智能是如何实现的,我们介绍几个:人脸识别(当下非常火的).音视频操作等等.今天先介绍一下静态图片的人脸识别, ...

  9. opencv +数字识别

    现在很多场景需要使用的数字识别,比如银行卡识别,以及车牌识别等,在AI领域有很多图像识别算法,大多是居于opencv 或者谷歌开源的tesseract 识别. 由于公司业务需要,需要开发一个客户端程序 ...

最新文章

  1. Android开发实现QQ三方登录 标签: android开发qq三方登录
  2. 高动态范围图像-单图
  3. 信号与线性系统分析_什么是线性系统?如何辨别控制系统?控制系统基本要求是什么?...
  4. iOS 判断纯汉字,还是是否含有汉字
  5. 内联脚本被视为是有害的_数据类被认为有害
  6. APACHE服务器出现No input file specified.解决方案
  7. win10自动停用打印服务器,win10系统添加打印机总是自动关闭打印服务的技巧介绍...
  8. 使用 Android 开发 MQTT 客户端
  9. 如何修改ssh端口号
  10. 微信小程序 首页弹出用户协议
  11. 安装linux时找不到硬盘,关于安装LINUX时找不到硬盘问题解决
  12. struts2通配符使用
  13. EPUB、CAJ 、PDF 格式的区别,有什么好用的安卓epub阅读器
  14. 信息系统规划方法-战略目标集转化法(SST)
  15. vue导出excel加一个进度条_vue 实现Excel 导入导出功能
  16. WMB数据源配置与绑定
  17. FMG首席执行官被控误导股市
  18. 计算机毕业设计ssm客房订餐系统s2whx系统+程序+源码+lw+远程部署
  19. 括号匹配算法问题 JS
  20. 【论文阅读】基于区块链的无人集群作战信息共享架构_臧义华

热门文章

  1. SPI驱动_linux
  2. 数据库游标(浓缩既是精华)
  3. openDIP深度包检测技术
  4. HTML及CSS常用颜色英文词汇
  5. (亚马逊云)10分钟-快速启动基于 Odoo 的电商网站
  6. 微信H5游戏开发的发展与现状
  7. 有关GLSL中的gl_FragCoord
  8. DRF实战---手机登录和注册
  9. 走马观花之早春扬州——一家三口亲子游
  10. 华为手机使用gspace