记录cvSmooth函数的用法和 OpenCV自带的人脸检测。

(1)cvSmooth函数
void cvSmooth( const CvArr* src, CvArr* dst,int smoothtype=CV_GAUSSIAN,int param1, int param2, double param3, double param4 );
src:输入图像.
dst:输出图像.
smoothtype平滑方法
  CV_BLUR_NO_SCALE(简单不带尺度变换的模糊),对每个象素的 param1×param2 领域求和。如果邻域大小是变化的,可以事先利用函数 cvIntegral 计算积分图像。
   CV_BLUR (simple blur)- -对每个象素param1×param2邻域求和并做尺度变换 1/(param1×param2)。
   CV_GAUSSIAN(gaussian blur) - -对图像进行核大小为 param1×param2 的高斯卷积。
   CV_MEDIAN(median blur) - -对图像进行核大小为param1×param1 的中值滤波 (邻域是方的)。
   CV_BILATERAL(双向滤波) - -应用双向 3x3 滤波,彩色 sigma=param1,空间 sigma=param2.。

param1:平滑操作的第一个参数.
param2:平滑操作的第二个参数. 对于简单/非尺度变换的高斯模糊的情况,如果param2的值为零,则表示其被设定为param1。
param3
  对应高斯参数的 Gaussian sigma (标准差). 如果为零,则标准差由下面的核尺寸计算:
  sigma = (n/2 - 1)*0.3 + 0.8,
其中 n=param1 对应水平核,n=param2 对应垂直核.
  对小的卷积核 (3×3 to 7×7) 使用如上公式所示的标准 sigma 速度会快。如果 param3 不为零,而 param1 和 param2 为零,则核大小由sigma 计算 (以保证足够精确的操作)。

  没有缩放的图像平滑仅支持单通道图像,并且支持8位到16位的转换(与cvSobel和cvaplace相似)和32位浮点数到32位浮点数的变换格式。
  简单模糊和高斯模糊支持 1- 或 3-通道, 8-比特 和 32-比特 浮点图像。这两种方法可以(in-place)方式处理图像。
  中值和双向滤波工作于 1- 或 3-通道, 8-位图像,但是不能以 in-place 方式处理图像。

从别处抄来的核心代码:

//邻域平均滤波
cvSmooth(pImg,pImg,CV_BLUR,3,3,0,0); //3x3
cvSmooth(pImg,pImg,CV_BLUR,5,5,0,0); //5x5
//中值滤波
cvSmooth(pImg,pImg,CV_MEDIAN,3,3,0,0); //3x3
cvSmooth(pImg,pImg,CV_MEDIAN,5,5,0,0); //5x5
//高斯滤波
cvSmooth(pImg,pImg,CV_GAUSSIAN,3,3,0,0); //3x3
cvSmooth(pImg,pImg,CV_GAUSSIAN,5,5,0,0); //5x5

我自己抄来的一个简单例子:

#include "stdafx.h"
#include <iostream> #pragma comment(lib,"../OpenCV-2.4.8/lib/opencv_core248d.lib")
#pragma comment(lib,"../OpenCV-2.4.8/lib/opencv_highgui248d.lib")
#pragma comment(lib,"../OpenCV-2.4.8/lib/opencv_imgproc248d.lib") #include "../OpenCV-2.4.8/include/highgui.h"
#include "../OpenCV-2.4.8/include/cv.h" using namespace std;
using namespace cv; int _tmain(int argc, char *argv[])
{
IplImage* img = cvLoadImage("3.jpg") ;
cvNamedWindow("DEMO-in") ;
cvNamedWindow("DEMO-out") ;
cvShowImage("DEMO-in",img) ; IplImage* out = cvCreateImage(cvGetSize(img), IPL_DEPTH_8U, 3) ; cvSmooth(img, out, CV_MEDIAN, 3, 3) ; cvShowImage("DEMO-out", out); cvReleaseImage( &out ) ; cvWaitKey( 0 ) ;
cvDestroyWindow("DEMO-in") ;
cvDestroyWindow("DEMO-out") ; return 0;
}

(2)OpenCV自带的人脸检测
代码:

#include "stdafx.h"
#include <stdio.h>
#include <stdlib.h>
#include <assert.h>
#include <math.h>
#include <float.h>
#include <limits.h>
#include <time.h>
#include <ctype.h> #include <opencv2\opencv.hpp>
#include <iostream>
#include <string>
using namespace cv;
using namespace std; #ifdef _EiC
#define WIN32
#endif static CvMemStorage* storage = 0;
static CvHaarClassifierCascade* cascade = 0; void detect_and_draw( IplImage* image ); const char* cascade_name =
"haarcascade_frontalface_alt.xml";
/* "haarcascade_profileface.xml";*/ int main( int argc, char** argv )
{
cascade_name = "haarcascade_frontalface_alt.xml";
cascade = (CvHaarClassifierCascade*)cvLoad( cascade_name, 0, 0, 0 ); if( !cascade )
{
fprintf( stderr, "ERROR: Could not load classifier cascade\n" );
return -1;
}
storage = cvCreateMemStorage(0);
cvNamedWindow( "result", 0 ); const char* filename = "2.jpg";
IplImage* image = cvLoadImage( filename, 1 ); if( image )
{
detect_and_draw( image );
cvWaitKey(0);
cvReleaseImage( &image );
} cvDestroyWindow("result"); return 0;
} void detect_and_draw(IplImage* img )
{
double scale=1.2;
static CvScalar colors[] = {
{{0,0,255}},{{0,128,255}},{{0,255,255}},{{0,255,0}},
{{255,128,0}},{{255,255,0}},{{255,0,0}},{{255,0,255}}
};//Just some pretty colors to draw with //Image Preparation
//
IplImage* gray = cvCreateImage(cvSize(img->width,img->height),8,1);
IplImage* small_img=cvCreateImage(cvSize(cvRound(img->width/scale),cvRound(img->height/scale)),8,1);
cvCvtColor(img,gray, CV_BGR2GRAY);
cvResize(gray, small_img, CV_INTER_LINEAR); cvEqualizeHist(small_img,small_img); //直方图均衡 //Detect objects if any
//
cvClearMemStorage(storage);
double t = (double)cvGetTickCount();
CvSeq* objects = cvHaarDetectObjects(small_img,
cascade,
storage,
1.1,
2,
0/*CV_HAAR_DO_CANNY_PRUNING*/,
cvSize(30,30)); t = (double)cvGetTickCount() - t;
printf( "detection time = %gms\n", t/((double)cvGetTickFrequency()*1000.) ); //Loop through found objects and draw boxes around them
for(int i=0;i<(objects? objects->total:0);++i)
{
CvRect* r=(CvRect*)cvGetSeqElem(objects,i);
cvRectangle(img, cvPoint(r->x*scale,r->y*scale), cvPoint((r->x+r->width)*scale,(r->y+r->height)*scale), colors[i%8]);
}
for( int i = 0; i < (objects? objects->total : 0); i++ )
{
CvRect* r = (CvRect*)cvGetSeqElem( objects, i );
CvPoint center;
int radius;
center.x = cvRound((r->x + r->width*0.5)*scale);
center.y = cvRound((r->y + r->height*0.5)*scale);
radius = cvRound((r->width + r->height)*0.25*scale);
cvCircle( img, center, radius, colors[i%8], 3, 8, 0 );
} cvShowImage( "result", img );
cvReleaseImage(&gray);
cvReleaseImage(&small_img);
}

   这其实是个Haar特征的级联分类器,haarcascade_frontalface_alt.xml这个文件存的应该是正脸的Haar特征数据(猜测的,没有深究过,欢迎拍砖指正),这个文件是OpenCV自带的,使用的时候拷贝到自己的工程面即可。该数据被加载到static CvHaarClassifierCascade* cascade变量,由detect_and_draw(IplImage* img ) 函数里面的cvHaarDetectObjects函数来实现人脸的检测。

cvSmooth函数 和 OpenCV自带的人脸检测的更多相关文章

  1. 【从零学习openCV】IOS7根据人脸检测

    前言: 人脸检測与识别一直是计算机视觉领域一大热门研究方向,并且也从安全监控等工业级的应用扩展到了手机移动端的app.总之随着人脸识别技术获得突破,其应用前景和市场价值都是不可估量的,眼下在学习ope ...

  2. OpenCV实践之路——人脸检测(C++/Python) 【转】

    转自:http://blog.csdn.net/xingchenbingbuyu/article/details/51105159 版权声明:本文为博主原创文章,转载请联系作者取得授权. 本文由@星沉 ...

  3. OpenCV学习代码记录——人脸检测

    很久之前学习过一段时间的OpenCV,当时没有做什么笔记,但是代码都还在,这里把它贴出来做个记录. 代码放在码云上,地址在这里https://gitee.com/solym/OpenCVTest/tr ...

  4. OpenCV 学习笔记 05 人脸检测和识别

    本节将介绍 Haar 级联分类器,通过对比分析相邻图像区域来判断给定图像或子图像与已知对象是否匹配. 本章将考虑如何将多个  Haar 级联分类器构成一个层次结构,即一个分类器能识别整体区域(如人脸) ...

  5. Python使用OpenCV实现简单的人脸检测

    文章目录: OpenCV安装 安装numpy 安装opencv OpenCV使用 OpenCV测试 效果图: 注意: 图片人脸检测 程序要求: 技术实现思路 注意 本文使用的环境是:Windows+P ...

  6. 基于OpenCV读取摄像头进行人脸检测和人脸识别

    前段时间使用OpenCV的库函数实现了人脸检测和人脸识别,笔者的实验环境为VS2010+OpenCV2.4.4,opencv的环境配置网上有很多,不再赘述.检测的代码网上很多,记不清楚从哪儿copy的 ...

  7. 调用opencv的接口实现人脸检测(简单)

    import cv2 import matplotlib.pyplot as plt %matplotlib inline # 提取预训练的人脸检测模型,提前下载好的模型 face_cascade = ...

  8. OpenCV 学习笔记 05 人脸检测和识别 AttributeError: module 'cv2' has no attribute 'face'

    1 环境设置: win10 python 3.6.8 opencv 4.0.1 2 尝试的方法 在学习人脸识别中,遇到了没有 cv2 中没有 face 属性.在网上找了几个方法,均没有成功解决掉该问题 ...

  9. 基于opencv和qt的人脸检测小系统

    摘要:利用opencv读取视频.图片并检测人脸,利用QT显示窗口,功能选择等 环境:Ubuntu18.04.OpenCV3.4.0.QT5.10.1 效果图: 代码如下(比较简单没什么注释): mai ...

随机推荐

  1. ps如果换背景

    一.魔棒工具 魔棒工具主要是使用户可以选择颜色一致的区域(例如,一朵红花)或者背景比较单调的图片,而不必跟踪其轮廓.魔棒工具选择的颜色范围可以由工具选项栏中的误差范围 参数值来控制. 二.钢笔工具 路 ...

  2. subprocess 模块 与终端相互交互

    import subprocess ''' sh-3.2# ls /Users/egon/Desktop |grep txt$ mysql.txt tt.txt 事物.txt ''' #1 Linux ...

  3. ionic真机调试Android报错 - could not read ok from ADB Server * failed to start daemon * error: cannot connect to daemon

    在使用真机调试Android程序时,报错如下: could not read ok from ADB Server * failed to start daemon error: cannot con ...

  4. git常用命令总结(转载)

    Workspace:工作区 Index / Stage:暂存区 Repository:仓库区(或本地仓库) Remote:远程仓库 一.新建代码库 # 在当前目录新建一个Git代码库 $ git in ...

  5. Java并发—原子类,java.util.concurrent.atomic包(转载)

    原子类 Java从JDK 1.5开始提供了java.util.concurrent.atomic包(以下简称Atomic包),这个包中 的原子操作类提供了一种用法简单.性能高效.线程安全地更新一个变量 ...

  6. Jenkins+maven+Tomcat+SVN一键自动打包部署应用到服务器

    今天请教了大神,终于把jenkins给搞明白了 现在做下笔记,防止自己老年痴呆又忘了怎么配置 (截图可能不够清晰,有不清楚的随时评论打call) 机器配置: 安装配置规划 机器 192.168.169 ...

  7. SCSS入门

    1. CSS预处理器 定义了一种新的专门的编程语言,编译后成正常的CSS文件.为CSS增加一些编程的特性,无需考虑浏览器的兼容问题,让CSS更加简洁,适应性更强,可读性更佳,更易于代码的维护等诸多好处 ...

  8. MySQL ——索引原理与慢查询优化(Day45)

    阅读目录 一 介绍 二 索引的原理 三 索引的数据结构 三 MySQL索引管理 四 测试索引 五 正确使用索引 六 查询优化神器-explain 七 慢查询优化的基本步骤 八 慢日志管理 ====== ...

  9. yii根据id查询一条数据

    model层 public function selectone($ag_id=''){ return $this->findBySql("SELECT * FROM agency w ...

  10. vscode 编写c++

    参考了 配置文件之前的操作:https://www.cnblogs.com/lianshuiwuyi/p/8094388.html 配置文件具体内容:https://blog.csdn.net/qq5 ...