参考:http://www.cnblogs.com/ronny/p/opencv_road_2.html

http://blog.csdn.net/xiaowei_cqu/article/details/7771760

http://www.opencv.org.cn/opencvdoc/2.3.2/html/doc/tutorials/core/how_to_scan_images/how_to_scan_images.html

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遍历图像小结的更多相关文章

  1. OpenCV ——遍历图像方法

    转自http://blog.csdn.net/daoqinglin/article/details/23628125 ; y < testImage->height; y++) { uch ...

  2. Opencv中图像的遍历与像素操作

    Opencv中图像的遍历与像素操作 OpenCV中表示图像的数据结构是cv::Mat,Mat对象本质上是一个由数值组成的矩阵.矩阵的每一个元素代表一个像素,对于灰度图像,像素是由8位无符号数来表示(0 ...

  3. OpenCV2+入门系列(三):遍历图像的几种方法

    根据OpenCV中Mat类型的结构和内存中存储方式,此处给出三种对图像进行遍历的方法.首先给出基础的读取图片代码,在中间替换三种遍历方法即可,本文中,程序将遍历图像并将所有像素点置为255,所有运行结 ...

  4. 11、OpenCV实现图像的灰度变换

    1.灰度变换的基本概念 灰度变换指对图像的单个像素进行操作,主要以对比度和阈值处理为目的.其变换形式如下: s=T(r) 其中,T是灰度变换函数:r是变换前的灰度:s是变换后的像素.图像灰度变换的有以 ...

  5. 海康威视摄像头+OpenCV+VS2017 图像处理小结(二)

    海康威视摄像头+OpenCV+VS2017 图像处理小结(二) https://blog.csdn.net/o_ha_yo_yepeng/article/details/79825648 目录 一.海 ...

  6. 12、OpenCV实现图像的直方图处理

    1.直方图 一幅图像由不同灰度值的像素组成,图像中灰度的分布情况是该图像的一个重要特征.图像的灰度直方图就描述了图像中灰度分布情况,能够很直观的展示出图像中各个灰度级所占的多少.图像的灰度直方图是灰度 ...

  7. 【图像处理】基于OpenCV实现图像直方图的原理

    背景 图像的直方图是衡量图像像素分布的一种方式,可以通过分析像素分布,使用直方图均衡化对图像进行优化,让图像变的清晰. opencv官方对图像直方图的定义如下: 直方图是图像中像素强度分布的图形表达方 ...

  8. PCL 点云数据操作 OpenCV遍历数据

    1.对于点云类型实例cloud,对其第i个点进行赋值操作,使用cloud.point[i].x 和 cloud.point[i].y 和cloud.point[i].z 分别对其XYZ坐标赋值. cl ...

  9. Java基于opencv实现图像数字识别(五)—投影法分割字符

    Java基于opencv实现图像数字识别(五)-投影法分割字符 水平投影法 1.水平投影法就是先用一个数组统计出图像每行黑色像素点的个数(二值化的图像): 2.选出一个最优的阀值,根据比这个阀值大或小 ...

随机推荐

  1. jquery 杂记

    返回指定属性名的属性值:getAttribute() 设置元素的属性值:attr('src',voiceurl) form表单: 序列化表单值: $('#formid').serialize()   ...

  2. 锁(MySQL篇)—之MyISAM表锁

    前言 锁是计算机协调多个进程或线程并发访问某一资源的机制,在数据库中,除传统的计算资源(如CPU.RAM.I/O等)的争用以外,数据也是一种供许多用户共享的资源.如何保证数据并发访问的一致性.有效性是 ...

  3. CentOS系统IPTables防火墙中FTP规则设置

    时间 2016-04-21 10:32:15  虫虫开源 原文  http://www.sijitao.net/2403.html 主题 iptablesFTP防火墙 在设置ftp通过iptables ...

  4. markdown语法与使用

    Markdown是一种可以使用普通文本编辑器编写的标记语言,通过简单的标记语法,它可以使普通文本内容具有一定的格式. 语法 # 文本 =>h1标签 ##文本 =>h2标签 *文本* =&g ...

  5. 前端构建工具的用法—grunt、gulp、browserify、webpack

    随着前端项目的飞速发展,项目越来越大.文件越来越多,前端工程化的工具也越来越多.下面介绍目前最流行的四种构建工具——grunt.gulp.browserify.webpack 所有的构建工具都是基于N ...

  6. 微信公众号开发系列教程一(调试环境部署续:vs远程调试)

    http://www.cnblogs.com/zskbll/p/4080328.html 目录 C#微信公众号开发系列教程一(调试环境部署) C#微信公众号开发系列教程一(调试环境部署续:vs远程调试 ...

  7. php 路径

    //魔术变量,获取当前文件的绝对路径 echo "__FILE__: ========> ".__FILE__; echo '<br/>'; //魔术变量,获取当 ...

  8. latex公式编号

    1 \begin{flalign*} 2 % In this way (this arrange of &), the equation will in the center and alig ...

  9. python基础八

    面向对象的好处 更容易扩展.提高代码使用效率,使你的代码组织性更强, 更清晰,更适合复杂项目的开发 封装 把功能的实现细节封装起来,只暴露调用接口 继承 多态 接口的继承 定义 类   ===> ...

  10. python 使用pymssql连接sql server数据库

    python 使用pymssql连接sql server数据库   #coding=utf-8 #!/usr/bin/env python#------------------------------ ...