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 ...
随机推荐
- 【BZOJ4008】[HNOI2015]亚瑟王 期望
[BZOJ4008][HNOI2015]亚瑟王 Description 小 K 不慎被 LL 邪教洗脑了,洗脑程度深到他甚至想要从亚瑟王邪教中脱坑. 他决定,在脱坑之前,最后再来打一盘亚瑟王.既然是最 ...
- 二十四点算法 java实现
问题: 给出四个数,不可以重复使用,可以用+ - * /和括号,怎么得出24? 代码: //return -1 表示当前方法不行 private int workByStep(int op,int n ...
- Query Mobile学习笔记
1.获取jQuery mobile 文件,访问jQuerymobile网站下载 (貌似使用jquery mobile后,jquery会自动在网页中添加一些class类,第一次知道的我是被吓呆的!!) ...
- 使用express-generator初始化你的项目目录
express 4.x以后将express命令独立到 express-generator包中,所以想使用express初始化项目目录,可以npm install express-genrator ...
- STM32之SRAM调试
在学习STM32的时候,由于烧FLASH的所造成的时间会比较慢,而在SRAM中调试的时间会比FLASH快很多,再加上FLASH的时候会经常擦除芯片,会对芯片的寿命造成一定的影响, 其实我本人觉得在学习 ...
- HashSet
- 动态调用WebService(C#) (非常实用)
通常我们在程序中需要调用WebService时,都是通过“添加Web引用”,让VS.NET环境来为我们生成服务代理,然后调用对应的Web服务.这样是使工作简单了,但是却和提供Web服务的URL.方法名 ...
- Android-adb指令
adb概念: adb的全称为Android Debug Bridge(调试桥):通过adb我们可以在Eclipse中方便通过DDMS来调试Android程序.当我们运行Eclipse时ADB进程 ...
- Unity学习疑问记录之Quaternion
http://www.cnblogs.com/88999660/articles/2893126.html
- HBuilder从下载到使用
听别人谈论这货,于是决定长长见识,见见世面,便屁颠屁颠到网上下一个,满怀好奇的研究了一下.对用过eclipse这款软件的人来说,上手非常容易. ☆ 准备工作 ① 确认自己的电脑连接网络,能下载东西. ...