opencv,图片遍历
//肤色提取,skinArea为二值化肤色图像
void skinExtract(const Mat &frame, Mat &skinArea)
{
Mat YCbCr;
vector<Mat> planes; //转换为YCrCb颜色空间
cvtColor(frame, YCbCr, CV_RGB2YCrCb); //将多通道图像分离为多个单通道图像
split(YCbCr, planes);
skinArea.create(YCbCr.size(), planes[1].type());
//人的皮肤颜色在YCbCr色度空间的分布范围:100<=Cb<=127, 138<=Cr<=170
int Cols = frame.cols;
for (int r = 0; r < frame.rows; r++){
const uchar* Cb = planes[1].ptr<uchar>(r);
const uchar* Cr = planes[2].ptr<uchar>(r);
uchar* data = skinArea.ptr<uchar>(r);
for (int c = 0; c < Cols; c++)
{
if (100 <= Cb[c] && Cb[c] <= 127 && 138 <= Cr[c] && Cr[c] <= 170)
{
data[c] = 0;
}
else{
data[c] = 255;
}
} } //膨胀和腐蚀,膨胀可以填补凹洞(将裂缝桥接),腐蚀可以消除细的凸起(“斑点”噪声) //dilate(skinArea, skinArea, Mat(3, 3, CV_8UC1), Point(-1, -1));
//erode(skinArea, skinArea, Mat(3, 3, CV_8UC1), Point(-1, -1));
//blur(skinArea, skinArea, cvSize(2, 2));
//erode(skinArea, skinArea,cv::Mat());
}
//肤色提取
double skinExtract(const IplImage *pFrame)
{
IplImage *pYCbCr = cvCreateImage(cvGetSize(pFrame), 8, 3);;
IplImage *pCb = cvCreateImage(cvGetSize(pFrame), 8, 1);
IplImage *pCr = cvCreateImage(cvGetSize(pFrame), 8, 1); cv::vector<IplImage*> planes; //转换成YCrCb颜色空间
cvCvtColor(pFrame, pYCbCr, CV_RGB2YCrCb);
//把多通道图像分离为单通道图像
cvSplit(pYCbCr, 0, pCb, pCr, 0);
//Cb[100,127] Cr[138,170]
long area = pYCbCr->height * pYCbCr->width;
long skin = 0;
for (int h = 0; h < pYCbCr->height; h++){
unsigned char *strCb = (unsigned char*)pCb->imageData + h*pCb->widthStep;
unsigned char *strCr = (unsigned char*)pCr->imageData + h*pCr->widthStep;
for (int w = 0; w < pYCbCr->width; w++){
if (strCb[w]>100 && strCb[w]<127 && (int)strCr[w]>138 && (int)strCr[w] < 170){
skin++;
}
}
} /*
cvErode(skinFrame, skinFrame, NULL, 1); //腐蚀
//cvDilate(skinFrame, skinFrame, NULL, 2); //膨胀
cvSmooth(skinFrame, skinFrame, CV_BLUR, 3, 3, 0, 0);
//cvShowImage("dst1", skinFrame);
*/
cvReleaseImage(&pYCbCr);
cvReleaseImage(&pCb);
cvReleaseImage(&pCr);
return skin*1.0 / area;
}
opencv,图片遍历的更多相关文章
- 基于opencv图片切割
基于opencv图片切割为n个3*3区块 工作原因,切割图片,任务急,暂留调通的源码,留以后用. package com.rosetta.image.test; import org.opencv.c ...
- Opencv图片明暗处理
Opencv图片明暗处理 #include <iostream> #include <opencv2/opencv.hpp> using namespace std; usin ...
- Python OpenCV图片转视频 工具贴(三)
Python OpenCV图片转视频 粘贴即用,注意使用时最好把自己的文件按照数字顺序命名.按照引导输入操作. # 一键傻瓜式引导图片串成视频 # 注意使用前最好把文件命名为数字顺序格式 import ...
- opencv——图像遍历以及像素操作
摘要 我们在图像处理时经常会用到遍历图像像素点的方式,在OpenCV中一般有四种图像遍历的方式,在这里我们通过像素变换的点操作来实现对图像亮度和对比度的调整. 补充: 图像变换可以看成 像素变换--点 ...
- OpenCV快速遍历矩阵元素方法
OpenCV中Mat矩阵data数据的存储方式和二维数组不一致,二维数组按照行优先的顺序依次存储,而Mat中还有一个标示行步进的变量Step.使用Mat.ptr<DataTyte>(row ...
- OpenCV图片类cv::Mat和QImage之间进行转换(好多相关文章)
在使用Qt和OpenCV混合编程时,我们有时需要在两种图片类cv::Mat和QImage之间进行转换,下面的代码参考了网上这个帖子: //##### cv::Mat ---> QImage ## ...
- OpenCV图片矩阵操作相关,对png图片操作(多通道)
文献链接: http://www.cnblogs.com/tornadomeet/archive/2012/12/26/2834336.html 下面这个高手,写了个小程序我还没有调试,回头 调试看看 ...
- opencv实现遍历文件夹下所有文件
前言 最近需要将视频数据集中的每个视频进行分割,分割成等长的视频片段,前提是需要首先遍历数据集文件夹中的所有视频. 实现 1.了解opencv中的Directory类: 2.实现测试代码: 系统环境 ...
- opencv图片转幻灯片视频
/*g++ *.cpp `pkg-config --cflags --libs opencv` -std=c++11*/ #include <opencv2/opencv.hpp> usi ...
随机推荐
- web请求的拦截与处理
1,特定请求的拦截:spring或struct2的拦截器,指定拦截模式和处理的servlet: 2,非特定的恶意非法请求,web.xml的error-page元素可以接受tomcat返回的错误代码,并 ...
- 图形化查看maven的dependency依赖
开发项目的时候,我们想知道一个maven的依赖库是来自那个工程,eclipse有插件可以直接看Dependency Hierarchy,推荐一个第三方的工具yED 在工程的pom.xml文件中添加如下 ...
- java基础-继承
浏览以下内容前,请点击并阅读 声明 一个由其他类继承的类叫子类(也叫继承类,扩展类等),该类继承的类叫父类或超类.除了Object类意外,所有的类都有切仅有一个父类,如果一个类没有用extends关键 ...
- linux内核分析作业:以一简单C程序为例,分析汇编代码理解计算机如何工作
一.实验 使用gcc –S –o main.s main.c -m32 命令编译成汇编代码,如下代码中的数字请自行修改以防与他人雷同 int g(int x) { return x + 3; } in ...
- PHP 两个多维数组根据某个键的值进行组合排序的几种思路(二)
几个经过封装的方法: 1.使用 array_multisort() 函数 <?php $arr = [ ['name'=>'dee','age'=>28], ['name'=> ...
- VS启用调试
今天访问127.0.0.1 发现 与localhost 不是访问的同一个内容. 于是乎,就向到了另一个方法来调试程序. 1.在IIS 建立站点 并指向程序源. 2.启动vs 调试→附加到进程→找到w ...
- 掌握Thinkphp3.2.0----自动验证
自动验证是TP在create数据的时候,自动对数据进行验证. TP提供了两种验证方式:静态验证($_validate属性----自定义的模型的)和validate()方法 1.静态验证-----$_v ...
- Python 中的urlencode和urldecode
python中的urlencode与urldecode 发表于2013/11/13 16:04:09 79983人阅读 分类: python 当url地址含有中文,或者参数有中文的时候,这个算是很正 ...
- php count()函数用法 及其 一个坑
用法 count() 函数返回数组中元素的数目. count(array,mode); [mode] 0 - 默认.不计算多维数组中的所有元素. 1 - 递归地计算数组中元素的数目(计算多维数组中的所 ...
- jquery in confluence.
https://confluence.atlassian.com/confkb/how-to-use-javascript-in-confluence-313458839.html https://a ...