参考: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. leetcode 111 minimum depth of binary tree

    problem description: Given a binary tree, find its minimum depth. The minimum depth is the number of ...

  2. .NET开源资源汇总

    1>>  力软信息化系统快速开发框架 2>>  金碟友商网 3>>

  3. C# XMLDocument

    今天开发一个WPF模块需要本地化保存一些用户设置,鉴于数据量不大,用XML. (要是再小的话可以用Resources 和 Settings). 清晰简短教程移步:http://bdk82924.ite ...

  4. mysql练习题-查询同时参加计算机和英语考试的学生的信息-遁地龙卷风

    (-1)写在前面 文章参考http://blog.sina.com.cn/willcaty. 针对其中的一道练习题想出两种其他的答案,希望网友给出更多回答. (0) 基础数据 student表 +-- ...

  5. eclipse软件创建servlet

    网上找了好多资料,eclipse创建servlet后,发到tomcat下发布,不能编译,生产class文件. 很多回答的都是一知半解,太气人了,看书.把资料找了一天,才发现是没有servlet-api ...

  6. shell 脚本中的运算

    #!/bin/bash read -p "please Insert two integer values: " a b if [ ! -n "$a" -o ! ...

  7. 在CentOS下搭建自己的Git服务器

    首先需要装好CentOS系统,作为测试,你可以选择装在虚拟机上,这样比较方便.这步默认你会,就不讲了.有了CentOS,那么如何搭建Git服务器呢?1.首先需要安装Git,可以使用yum源在线安装: ...

  8. Circular Buffer

    From:http://bradforj287.blogspot.com/2010/11/efficient-circular-buffer-in-java.html import java.util ...

  9. JSP复习整理(四)Cookie

    一.useCookie.html <!DOCTYPE html> <html> <head> <meta charset="UTF-8"& ...

  10. spring mvc <mvc:annotation-driven/> 自定义拦截器不走

    <mvc:annotation-driven/> 这个便签会注册2个自定义拦截器,所以导致请求过来就会自己去走注册的这2个拦截器和定义的一堆bean 但是这个便签是必须得定义的 直接贴代码 ...