OpenCv遍历图像小结
参考:http://www.cnblogs.com/ronny/p/opencv_road_2.html
http://blog.csdn.net/xiaowei_cqu/article/details/7771760
http://segmentfault.com/a/1190000000598650
本文主要是在opencv2.0以后的版本,使用Mat作为数据的基本操作类型。
最快的方法-----使用指针遍历图像
1 遍历单通道图像
利用指针访问
Mat src = imread("lena.jpg", 0);
Mat dst = Mat(src.rows, src.cols, CV8U_C1);
for (int i = ; i < row; ++i)
{
uchar *srcptr = src.ptr<uchar>(i);
uchar *dstptr = dst.ptr<float>(i);
for (int j = ; j < col; ++j)
{
*(dstptr + j) = *(srcptr + j);
}
}
利用at访问
cv::Mat srcgrayimg;
cv::cvtColor(srcimg, srcgrayimg, CV_BGR2GRAY);
for (int y = facetybegin; y < facetyend; ++y)
{
for (int x = facetybegin; x < facetyend; ++x)
{
FacePoint dstpoint;
dstpoint.x = x;
dstpoint.y = y;
if (isPointInRect(dstpoint, quadrilateralLeft) == true)
{
sumLeft += srcgrayimg.at<uchar>(y, x);
areaLeft++;
}
if (isPointInRect(dstpoint, quadrilateralRight) == true)
{
sumRight += srcgrayimg.at<uchar>(y, x);
areaRight++;
}
}
}
2 遍历彩色图像
这里可以通过两种方式Vec3b和step elemSize两种方式来访问
Mat src = imread("lena.jpg", );
//通过指针遍历彩色图像
uchar *data = src.data;
int i = ;
int j = ;
//获取第i行 第j列的元素RGB值
//获取B通道
int pix1 = src.at<Vec3b>(i, j)[];
int pix2 = *(data + i * src.step + j* src.elemSize()+);
cout << pix1 << " " << pix2 << endl;
cout << src.step << " " << src.elemSize() << endl;
通过指针,适合与任何通道的图像
channel = int row = src.rows;
int col = src.cols; Mat dst = Mat(row, col, CV_16UC3);
for (int i = ; i < row; ++i)
{
ushort *dataWarpRow = dst.ptr<ushort>(i);
for (int j = ; j < col; ++j)
{ ushort *dataWarpCol = dataWarpRow + j * src.channels();
if ((dataWarpCol)[] == && (dataWarpCol)[] == && (dataWarpCol)[] == )
{
;
}
}
}
OpenCv遍历图像小结的更多相关文章
- OpenCV ——遍历图像方法
转自http://blog.csdn.net/daoqinglin/article/details/23628125 ; y < testImage->height; y++) { uch ...
- Opencv中图像的遍历与像素操作
Opencv中图像的遍历与像素操作 OpenCV中表示图像的数据结构是cv::Mat,Mat对象本质上是一个由数值组成的矩阵.矩阵的每一个元素代表一个像素,对于灰度图像,像素是由8位无符号数来表示(0 ...
- OpenCV2+入门系列(三):遍历图像的几种方法
根据OpenCV中Mat类型的结构和内存中存储方式,此处给出三种对图像进行遍历的方法.首先给出基础的读取图片代码,在中间替换三种遍历方法即可,本文中,程序将遍历图像并将所有像素点置为255,所有运行结 ...
- 11、OpenCV实现图像的灰度变换
1.灰度变换的基本概念 灰度变换指对图像的单个像素进行操作,主要以对比度和阈值处理为目的.其变换形式如下: s=T(r) 其中,T是灰度变换函数:r是变换前的灰度:s是变换后的像素.图像灰度变换的有以 ...
- 海康威视摄像头+OpenCV+VS2017 图像处理小结(二)
海康威视摄像头+OpenCV+VS2017 图像处理小结(二) https://blog.csdn.net/o_ha_yo_yepeng/article/details/79825648 目录 一.海 ...
- 12、OpenCV实现图像的直方图处理
1.直方图 一幅图像由不同灰度值的像素组成,图像中灰度的分布情况是该图像的一个重要特征.图像的灰度直方图就描述了图像中灰度分布情况,能够很直观的展示出图像中各个灰度级所占的多少.图像的灰度直方图是灰度 ...
- 【图像处理】基于OpenCV实现图像直方图的原理
背景 图像的直方图是衡量图像像素分布的一种方式,可以通过分析像素分布,使用直方图均衡化对图像进行优化,让图像变的清晰. opencv官方对图像直方图的定义如下: 直方图是图像中像素强度分布的图形表达方 ...
- PCL 点云数据操作 OpenCV遍历数据
1.对于点云类型实例cloud,对其第i个点进行赋值操作,使用cloud.point[i].x 和 cloud.point[i].y 和cloud.point[i].z 分别对其XYZ坐标赋值. cl ...
- Java基于opencv实现图像数字识别(五)—投影法分割字符
Java基于opencv实现图像数字识别(五)-投影法分割字符 水平投影法 1.水平投影法就是先用一个数组统计出图像每行黑色像素点的个数(二值化的图像): 2.选出一个最优的阀值,根据比这个阀值大或小 ...
随机推荐
- 分享公司DAO层动态SQL的一些封装
主题 公司在DAO层使用的框架是Spring Data JPA,这个框架很好用,基本不需要自己写SQL或者HQL就能完成大部分事情,但是偶尔有一些复杂的查询还是需要自己手写原生的Native SQL或 ...
- ASP.MVC 基于AuthorizeAttribute权限设计案例
ASP.MVC上实现权限控制的方法很多,比如使用AuthorizeAttribute这个特性 1.创建自定义特性用于权限验证 public class AuthorizeDiy : Authorize ...
- 我们平时是怎么写html和css的?
文章的起因,我只是为了回复一个帖子,http://bbs.csdn.net/topics/390908928?page=1 结果,一扯就根本停不下来.索性,一捅为快,反正是周末. 拿到效果图时,有这么 ...
- Javascript操作DOM常用API总结
基本概念 在讲解操作DOM的api之前,首先我们来复习一下一些基本概念,这些概念是掌握api的关键,必须理解它们. Node类型 DOM1级定义了一个Node接口,该接口由DOM中所有节点类型实现.这 ...
- vtkQuadric创建二次曲面
在本实例中,我们将用到vtkQuadric.vtkSampleFunction.vtkContourFilter三个类,分别是二次曲面函数.函数曲面抽样和等高滤波. vtkQuadric负责二次曲面基 ...
- 2016-WAS
http://cuisuqiang.iteye.com/blog/1936402 http://gukeming888.iteye.com/blog/1706475 dd:2016-3-28 inst ...
- windows XP上实现python2.7.5和python3.4.3共存
windows XP上实现python2.7.5和python3.4.3共存过程记录: 1. 首先安装python2.7.5和python3.4.3,两个版本安装顺序不分前后; 2. 检查系统环境变量 ...
- git操作
svn终结,git时代来临 git是最好的分布式版本控制系统 廖雪峰的git讲的蛮不错,http://www.liaoxuefeng.com/wiki/0013739516305929606dd183 ...
- 手机设计尺寸 - iPhone界面尺寸
参考网址: http://www.qijishow.com/down/app-index.htm iPhone界面尺寸 设备 分辨率 PPI 状态栏高度 导航栏高度 标签栏高度 iPhone6 plu ...
- 腾讯开放平台web第三方登录获取信息类(包含签名)
不清楚具体参数的可以先看下第三方登录的文档: class QQ { //$appid 你的appid //$openid 获取到的唯一的用户openid //$openkey 获取到的openkey ...