opencv边界识别
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边界识别相关推荐
- OpenCV 人脸识别 源代码
请直接查看原文 OpenCV 人脸识别 源代码 https://hotdog29.com/?p=553 在 2019年7月6日 上张贴 由 hotdog发表回复 opencv 人脸识别 在本教程中,您 ...
- PyTorch + openCV 车牌识别(一)
PyTorch + openCV 车牌识别(一) 注意 利用cv识别车牌并切割字符 注意 本项目仅是初学者学习pytorch过程中随手写的,有些地方不够严谨请谅解,仅供参考 利用cv识别车牌并切割字符 ...
- python opencv 文字识别_文本识别 使用 Tesseract 进行 OpenCV OCR 和 文本识别
文本识别 用 Tesseract 进行 OpenCV OCR 和 文本识 在本教程中,您将学习如何应用OpenCV OCR(光学字符识别).我们将使用OpenCV,Python和Tesseract 执 ...
- opencv车牌识别入门资料汇总
使用OpenCV和C++实现的车牌识别系统. http://download.csdn.net/detail/u014743238/7204477 使用VC++6.0做开发工具, 采用简单的SDI框架 ...
- opencv 全志_移植opencv人脸识别到全志A10开发板上 +linux3.0内核
移植opencv人脸识别 libz: zlib-1.2.3 libjpeg: jpegsrc.v6b libpng: libpng-1.2.18 libyasm: yasm-0.7. ...
- OpenCV字母识别letter recognition的实例(附完整代码)
OpenCV字母识别letter recognition的实例 OpenCV字母识别letter recognition的实例 OpenCV字母识别letter recognition的实例 #inc ...
- OpenCV条形码识别
OpenCV条形码识别 条形码识别 目标 基本 EAN 13 条码检测器 初始化 探测 解码 结果 原始图片 detectAndDecode的结果 条形码识别 目标 在这一章当中, 我们将熟悉Open ...
- python人脸照片分类_Python OpenCV 人脸识别(一)
前面介绍了Numpy模块,下面再介绍一个OpenCV模块,就基于这两个库看一下当下很火的人工智能是如何实现的,我们介绍几个:人脸识别(当下非常火的).音视频操作等等.今天先介绍一下静态图片的人脸识别, ...
- opencv +数字识别
现在很多场景需要使用的数字识别,比如银行卡识别,以及车牌识别等,在AI领域有很多图像识别算法,大多是居于opencv 或者谷歌开源的tesseract 识别. 由于公司业务需要,需要开发一个客户端程序 ...
最新文章
- Android开发实现QQ三方登录 标签: android开发qq三方登录
- 高动态范围图像-单图
- 信号与线性系统分析_什么是线性系统?如何辨别控制系统?控制系统基本要求是什么?...
- iOS 判断纯汉字,还是是否含有汉字
- 内联脚本被视为是有害的_数据类被认为有害
- APACHE服务器出现No input file specified.解决方案
- win10自动停用打印服务器,win10系统添加打印机总是自动关闭打印服务的技巧介绍...
- 使用 Android 开发 MQTT 客户端
- 如何修改ssh端口号
- 微信小程序 首页弹出用户协议
- 安装linux时找不到硬盘,关于安装LINUX时找不到硬盘问题解决
- struts2通配符使用
- EPUB、CAJ 、PDF 格式的区别,有什么好用的安卓epub阅读器
- 信息系统规划方法-战略目标集转化法(SST)
- vue导出excel加一个进度条_vue 实现Excel 导入导出功能
- WMB数据源配置与绑定
- FMG首席执行官被控误导股市
- 计算机毕业设计ssm客房订餐系统s2whx系统+程序+源码+lw+远程部署
- 括号匹配算法问题 JS
- 【论文阅读】基于区块链的无人集群作战信息共享架构_臧义华