通过不同方式访问图像像素

最近在学习vs2010并结合opencv2.4.3进行图像处理,首先研究了在opencv中如何去访问像素,查阅资料,浏览博客,总结了一下,一般有三种方法:Mat类的.at()函数,指针,迭代器,代码如下:

// sy1.cpp : 定义控制台应用程序的入口点。

/通过不同的方式去访问图像像素/

#include "stdafx.h"

#include "opencv2/highgui/highgui.hpp"

#include "opencv2/core/core.hpp"

#include "opencv2/imgproc/imgproc.hpp"

#include <iostream>

using namespace std;

using namespace cv;

int _tmain(int argc, _TCHAR* argv[])

{

double t1=(double)getTickCount();//记录起始时间

Mat img=imread("C:\\Users\\Administrator\\Desktop\\002.bmp");

Mat img_gray;

cvtColor(img,img_gray,CV_RGB2GRAY);//彩图转为灰度图

imwrite("C:\\Users\\Administrator\\Desktop\\002ff.bmp",img_gray);

Mat img2(img_gray.rows,img_gray.cols,CV_8U);

/指针访问/

int i,j;

uchar*  pt;

for (i=0;i<img_gray.rows;i++)

{

pt=img_gray.ptr<uchar>(i);//获取第i行的首地址

for (j=0;j<img_gray.cols;j++)

{

if (pt[j]>100)//第i行的第j个像素

{

img2.at<uchar>(i,j)=255;

}

else

img2.at<uchar>(i,j)=0;

}

}

///最简单的.at()函数//

不推荐此方式,太慢/

int i,j;

for (i=0;i<img_gray.rows;i++)

{

for (j=0;j<img_gray.cols;j++)

{

if(img_gray.at<uchar>(i,j)>100)

img2.at<uchar>(i,j)=255;

else

img2.at<uchar>(i,j)=0;

}

}

/使用迭代器去访问//

///速度不是最快的,但是安全/

Mat_<uchar>::iterator it=img_gray.begin<uchar>();//获得初始位置迭代器

Mat_<uchar>::iterator it1=img2.begin<uchar>();

while(it!=img_gray.end<uchar>())

{

if (*it>100)

{

(*it1)=255;

}

else

{

(*it1)=0;

}

++it;

++it1;

}

double t2=(double)getTickCount();//结束时间

double t3=(t2-t1)/getTickFrequency();//耗时

cout<<t3<<"s"<<endl;

namedWindow("ff");

imshow("ff",img2);

imwrite("C:\\Users\\Administrator\\Desktop\\shiyan.bmp",img2);

waitKey(0);

return 0;

}

总结,指针的方法是最快的;at()函数法最慢,但是理解起来方便;迭代器法居中,但是安全。

转载于:https://www.cnblogs.com/freecloudinsky/p/3424352.html

opencv2.4.3通过不同方式访问图像像素相关推荐

  1. Opencv3编程入门学习笔记(三)之访问图像像素的三种方法

    访问图像像素的三种方法:指针访问,迭代器访问,动态地址访问.访问最快的为指针访问,以下算法在几毫秒,但指针访问容易造成内存泄漏:其次为迭代器访问:最后为动态地址访问. 以下程序是根据<OpenC ...

  2. Emgu CV4图像处理之访问图像像素通道值7(C#)

    本文测试环境: win10  64位 vistual studio 2019 Emgu CV 4.6.0 环境配置准备: 1 新增控制台项目,.net framework为4.7.2 2  把win- ...

  3. c++ opencv数字图像处理:访问图像像素,遍历图像像素

    文章目录 前言 一.访问图像像素 1.访问(j,i)处像素 2.例子:在图像中加入白色椒盐噪声 二.遍历图像像素 1.指针扫描 2.opencv自带的卷积运算:filter2D 前言 数字图像处理c+ ...

  4. ITK系列4_ ITK访问图像像素数据

    实例4 ITK访问图像像素数据 #include "itkImage.h" //这个例子阐述了 SetPixel( )和 GetPixel( )方法的用法 //可以直接访问图像中包 ...

  5. Opencv--IplImage访问图像像素的值

    opencv2.1版本之前使用IplImage*数据结构来表示图像,2.1之后的版本使用图像容器Mat来存储.IplImage结构体如下所示. 1 typedef struct _IplImage 2 ...

  6. OpenCV2:幼儿园篇 第四章 访问图像

    一.行/列访问 1.单行/单列访问 Mat Mat::row(int i) const Mat Mat::col(int j) const 2.多行/多列访问 Range(start,end); Ra ...

  7. 【OpenCV】简单高效地访问图像像素

    对于单通道字节型图像: IplImage* img = cvCreateImage(cvSize(640,480),IPL_DEPTH_8U,1); int height = img->heig ...

  8. 【OpenCV】OpenCV实战从入门到精通之 -- 访问图像中的像素

    目录 1.图像在内存之中的存储方式 2.颜色空间缩减 3.LUT函数:Look up table操作 4.计时函数 5.访问图像中像素的三类方法 5.1.指针访问像素 5.2.迭代器操作像素 5.3. ...

  9. VTK修炼之道19:图像基本操作_图像像素值的访问与修改

    1.直接访问图像像素(索引法) #include <vtkAutoInit.h> VTK_MODULE_INIT(vtkRenderingOpenGL);#include <vtkS ...

最新文章

  1. “大数据系统软件国家工程实验室”建设项目通过验收
  2. 在URL地址栏中显示ico
  3. GARFIELD@01-31-2005
  4. leetcode之回溯backtracing专题4
  5. C/C++ 中判断某一文件或目录是否存在
  6. boot空间不足 linux,linux——boot空间不足
  7. SSM框架笔记12:Spring JdbcTemplate
  8. ZOJ 1610 Count the Colors
  9. pip 安装 pytorch环境
  10. 中国女人比美国女人好在哪?
  11. 《互联网周刊》发布2019快时尚品牌排行榜
  12. 计算机无法识别建行网银盾,电脑无法识别建行网银盾怎么办
  13. 关于计算机网考教学研讨,【计算机教学论文】计算机教学质量的研讨2篇(共4479字)...
  14. 【机智云专题】①:乐鑫esp8266巧用机智云自动代码生成功能,移植加入驱动单路继电器,实现智能定时插座。(附带demo)
  15. 看透SpringMVC源码-网站架构演变1-3
  16. 2021年5月30日 星期日 晴
  17. arcgis中解决点位符号化时重叠冲突
  18. Android SDK Windows 安装及环境配置教程
  19. 怎么用计算机输入名字,怎么用电脑起名字
  20. 编译原理-6-LR语法分析器

热门文章

  1. Flutter TextField 设置默认值和光标位置
  2. Flutter视频播放、Flutter VideoPlayer 视频播放组件精要
  3. python的requests库
  4. 事物注解方式: @Transactional
  5. Can't connect to MySQL server on 'ip' (13)
  6. C# MVC 用户登录状态判断
  7. Excel 使用VBA 使表格的值被修改后填充颜色标注
  8. ios xcode真机调试获取屏幕截屏
  9. shell的if和else
  10. C# 保存byte[]到数据库和读取,把byte[]写进文件文件中