opencv,关于物体检测
关于物体检测
环境:opencv 2.4.11+vs2013
参考:
http://www.cnblogs.com/tornadomeet/archive/2012/06/02/2531705.html
http://www.cnblogs.com/xinyuyuanm/archive/2013/04/29/3050750.html
#include <string>
#include <iostream>
#include <stdio.h>
#include <fstream>
#include<math.h> #include <opencv2\opencv.hpp>
#include <opencv2\highgui\highgui.hpp>
#include <opencv2\imgproc\imgproc.hpp>
#include <opencv2\core\core.hpp> using namespace std;
using namespace cv; #define threshold_diff 20
int main()
{
Mat src1 = imread("图片1.png"), gray1;
cvtColor(src1, gray1, COLOR_BGR2GRAY);
Mat src2 = imread("图片2.png"), gray2;
cvtColor(src2, gray2, COLOR_BGR2GRAY);
//降噪
blur(gray1, gray1, Size(, ));
blur(gray2, gray2, Size(, )); //二值化
Mat gray_diff;
//CvMat *src1, *src2;
//cvAbsDiff(gray_src_y, gray_src_no, abs_src);
subtract(gray2, gray1, gray_diff);
for (int i = ; i < gray_diff.rows; i++)
{
for (int j = ; j < gray_diff.cols; j++)
{
if (abs(gray_diff.at<unsigned char>(i,j)) >= threshold_diff)
gray_diff.at<unsigned char>(i, j) = ;
else
gray_diff.at<unsigned char>(i, j) = ;
}
} //开运算(膨胀腐蚀算子)
Mat out;
Mat element = getStructuringElement(MORPH_RECT, Size(, ));
erode(gray_diff, out, element);
dilate(out, out, element); //查找轮廓
Mat dst = Mat::zeros(out.size(), CV_8UC3);
vector<vector<Point>> contours;
vector<Vec4i> hierarchy;
findContours(out, contours, hierarchy, CV_RETR_CCOMP, CV_CHAIN_APPROX_SIMPLE);
int index = , largestComp;
double maxArea = ;
for (; index >= ; index = hierarchy[index][])
{
const vector<Point>& c = contours[index];
double area = fabs(contourArea(Mat(c)));
if (area >maxArea)
{
maxArea = area;
largestComp = index; }
}
Scalar color(, , );
drawContours(dst, contours, largestComp, color, CV_FILLED, , hierarchy); imshow("轮廓图", dst); imshow("原图", src1);
imshow("放入物品", src2);
imshow("图片差", gray_diff);
imshow("开运算", out); waitKey();
system("pause");
return ;
}


opencv,关于物体检测的更多相关文章
- [PyImageSearch] Ubuntu16.04 使用深度学习和OpenCV实现物体检测
上一篇博文中讲到如何用OpenCV实现物体分类,但是接下来这篇博文将会告诉你图片中物体的位置具体在哪里. 我们将会知道如何使用OpenCV‘s的dnn模块去加载一个预训练的物体检测网络,它能使得我们将 ...
- OpenCV学习 物体检测 人脸识别 填充颜色
介绍 OpenCV是开源计算机视觉和机器学习库.包含成千上万优化过的算法.项目地址:http://opencv.org/about.html.官方文档:http://docs.opencv.org/m ...
- OpenCV平面物体检测
平面物体检测 这个教程的目标是学习如何使用 features2d 和 calib3d 模块来检测场景中的已知平面物体. 测试数据: 数据图像文件,比如 “box.png”或者“box_in_scene ...
- 利用opencv进行移动物体检测
进行运动物体检测就是将动态的前景从静态的背景中分离出来.将当前画面与假设是静态背景进行比较发现有明显的变化的区域,就可以认为该区域出现移动的物体.在实际情况中由于光照阴影等因素干扰比较大,通过像素直接 ...
- OpenCV—Python 轮廓检测 绘出矩形框(findContours\ boundingRect\rectangle
千万注意opencv的轮廓检测和边缘检测是两码事 本文链接:https://blog.csdn.net/wsp_1138886114/article/details/82945328 1 获取轮廓 O ...
- OpenCV实现人脸检测
OpenCV实现人脸检测(转载) 原文链接:https://www.cnblogs.com/mengdd/archive/2012/08/01/2619043.html 本文介绍最基本的用OpenC ...
- OpenCV特征点检测------ORB特征
OpenCV特征点检测------ORB特征 ORB是是ORiented Brief的简称.ORB的描述在下面文章中: Ethan Rublee and Vincent Rabaud and Kurt ...
- opencv车道线检测
opencv车道线检测 完成的功能 图像裁剪:通过设定图像ROI区域,拷贝图像获得裁剪图像 反透视变换:用的是老师给的视频,没有对应的变换矩阵.所以建立二维坐标,通过四点映射的方法计算矩阵,进行反透视 ...
- 【转载】opencv实现人脸检测
全文转载自CSDN的博客(不知道怎么将CSDN的博客转到博客园,应该没这功能吧,所以直接复制全文了),转载地址如下 http://blog.csdn.net/lsq2902101015/article ...
随机推荐
- AssetStore资源名字
NGUI A Pathfinding Project Pro PlayMaker 2DToolkit Scene Manager UniLOD UniLUA Save Game-JSON+Binary ...
- 一个不错的vim配置
set nocp set backspace=indent,eol,start set number set autoindent set nocompatible set bs=indent,eol ...
- Iaas-cloudstack2
流程是下面的模板安装脚本,将对应的hypervisor模板下载下来并另存为临时文件,并解压缩,并将其移动到二级存储相应目录下,仅完成此工作. [root@manage nfs]# /usr/share ...
- shell之并行
http://my.oschina.net/enyo/blog/271612 GNU Parallel指南 http://www.gnu.org/software/parallel/parallel_ ...
- Web Pages razor 学习
1. Web Pages razor Web Pages 是三种 ASP.NET 编程模型中的一种,用于创建 ASP.NET 网站和 web 应用程序. 其他两种编程模型是 Web Forms 和 M ...
- Amazon后台登陆以及跟卖
亚马逊模拟登陆,这里使用的是selenium来登陆,并判断是否登陆成功,以及是否有验证码,并破解验证码登陆. 跟卖主要解决的难题是selenium的新窗口弹出问题,在 # 点击“出售您的” brows ...
- javascript中in和hasOwnProperty区别
in操作符只要通过对象能访问到属性就返回true.hasOwnProperty()只在属性存在于实例中时才返回true. function Person(){ } Person.prototype.n ...
- J2EE分布式事务中的提交、回滚方法调用异常。
这个是昨天上班的时候,写一个后台程序的调试程序时碰到的问题,和项目经理纠结了一天,最后搞定了.于是今天上班正好闲着,花了几乎一天的时间去网上找各种相关的资料.目前了解的内容如此: 根据使用的weblo ...
- oracle定时任务JOB
在jobs上点新建 what值:statisticsToDay; 这个是存储过程的名字间隔:sysdate+1/24 表示每个小时运行一次 1:每分钟执行 Interval ...
- mysql 远程访问
如何开启MySQL的远程帐号-1)首先以 root 帐户登陆 MySQL 在 Windows 主机中点击开始菜单,运行,输入“cmd”,进入控制台,然后cd 进入MySQL 的 bin 目录下,然后输 ...