opencv2.4.3通过不同方式访问图像像素
通过不同方式访问图像像素
最近在学习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通过不同方式访问图像像素相关推荐
- Opencv3编程入门学习笔记(三)之访问图像像素的三种方法
访问图像像素的三种方法:指针访问,迭代器访问,动态地址访问.访问最快的为指针访问,以下算法在几毫秒,但指针访问容易造成内存泄漏:其次为迭代器访问:最后为动态地址访问. 以下程序是根据<OpenC ...
- Emgu CV4图像处理之访问图像像素通道值7(C#)
本文测试环境: win10 64位 vistual studio 2019 Emgu CV 4.6.0 环境配置准备: 1 新增控制台项目,.net framework为4.7.2 2 把win- ...
- c++ opencv数字图像处理:访问图像像素,遍历图像像素
文章目录 前言 一.访问图像像素 1.访问(j,i)处像素 2.例子:在图像中加入白色椒盐噪声 二.遍历图像像素 1.指针扫描 2.opencv自带的卷积运算:filter2D 前言 数字图像处理c+ ...
- ITK系列4_ ITK访问图像像素数据
实例4 ITK访问图像像素数据 #include "itkImage.h" //这个例子阐述了 SetPixel( )和 GetPixel( )方法的用法 //可以直接访问图像中包 ...
- Opencv--IplImage访问图像像素的值
opencv2.1版本之前使用IplImage*数据结构来表示图像,2.1之后的版本使用图像容器Mat来存储.IplImage结构体如下所示. 1 typedef struct _IplImage 2 ...
- OpenCV2:幼儿园篇 第四章 访问图像
一.行/列访问 1.单行/单列访问 Mat Mat::row(int i) const Mat Mat::col(int j) const 2.多行/多列访问 Range(start,end); Ra ...
- 【OpenCV】简单高效地访问图像像素
对于单通道字节型图像: IplImage* img = cvCreateImage(cvSize(640,480),IPL_DEPTH_8U,1); int height = img->heig ...
- 【OpenCV】OpenCV实战从入门到精通之 -- 访问图像中的像素
目录 1.图像在内存之中的存储方式 2.颜色空间缩减 3.LUT函数:Look up table操作 4.计时函数 5.访问图像中像素的三类方法 5.1.指针访问像素 5.2.迭代器操作像素 5.3. ...
- VTK修炼之道19:图像基本操作_图像像素值的访问与修改
1.直接访问图像像素(索引法) #include <vtkAutoInit.h> VTK_MODULE_INIT(vtkRenderingOpenGL);#include <vtkS ...
最新文章
- “大数据系统软件国家工程实验室”建设项目通过验收
- 在URL地址栏中显示ico
- GARFIELD@01-31-2005
- leetcode之回溯backtracing专题4
- C/C++ 中判断某一文件或目录是否存在
- boot空间不足 linux,linux——boot空间不足
- SSM框架笔记12:Spring JdbcTemplate
- ZOJ 1610 Count the Colors
- pip 安装 pytorch环境
- 中国女人比美国女人好在哪?
- 《互联网周刊》发布2019快时尚品牌排行榜
- 计算机无法识别建行网银盾,电脑无法识别建行网银盾怎么办
- 关于计算机网考教学研讨,【计算机教学论文】计算机教学质量的研讨2篇(共4479字)...
- 【机智云专题】①:乐鑫esp8266巧用机智云自动代码生成功能,移植加入驱动单路继电器,实现智能定时插座。(附带demo)
- 看透SpringMVC源码-网站架构演变1-3
- 2021年5月30日 星期日 晴
- arcgis中解决点位符号化时重叠冲突
- Android SDK Windows 安装及环境配置教程
- 怎么用计算机输入名字,怎么用电脑起名字
- 编译原理-6-LR语法分析器
热门文章
- Flutter TextField 设置默认值和光标位置
- Flutter视频播放、Flutter VideoPlayer 视频播放组件精要
- python的requests库
- 事物注解方式: @Transactional
- Can't connect to MySQL server on 'ip' (13)
- C# MVC 用户登录状态判断
- Excel 使用VBA 使表格的值被修改后填充颜色标注
- ios xcode真机调试获取屏幕截屏
- shell的if和else
- C# 保存byte[]到数据库和读取,把byte[]写进文件文件中