opencv2.4.3访问图像像素常用几种方法

更新时间:2023-05-19 21:47:01 阅读量: 实用文档 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

opencv2.4.3访问图像的简单的几种方法:指针法,迭代器法,at()函数法,供大家参考。

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

最近在学习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_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++) { } ///////////////////最简单的.at()函数////////////////////////////////////////////// ////////////////////////不推荐此方式,太慢///////////////////////////////////////// int i,j; for (i=0;i<img_gray.rows;i++) { pt=img_gray.ptr<uchar>(i); for (j=0;j<img_gray.cols;j++) { } if (pt[j]>100) { } else img2.at<uchar>(i,j)=0; img2.at<uchar>(i,j)=255; //第i行的第j个像素 //获取第i行的首地址 //记录起始时间 Mat img=imread("C:\\Users\\Administrator\\Desktop\\002.bmp"); 通过不同的方式去访问图像像素///////////////////////////////////////////// /////////////////////////////指针访问/////////////////////////////////////////////

opencv2.4.3访问图像的简单的几种方法:指针法,迭代器法,at()函数法,供大家参考。

} } for (j=0;j<img_gray.cols;j++) { } if(img_gray.at<uchar>(i,j)>100) img2.at<uchar>(i,j)=255; img2.at<uchar>(i,j)=0; else /////////////////////使用迭代器去访问////////////////////////////////////////////// ///////////////速度不是最快的,但是安全///////////////////////////////////////////// Mat_<uchar>::iterator it=img_gray.begin<uchar>(); Mat_<uchar>::iterator it1=img2.begin<uchar>(); while(it!=img_gray.end<uchar>()) { } double t2=(double)getTickCount(); cout<<t3<<"s"<<endl; namedWindow("ff"); imshow("ff",img2); imwrite("C:\\Users\\Administrator\\Desktop\\shiyan.bmp",img2); waitKey(0); return 0;

总结,指针的方法是最快的;at()函数法最慢,但是理解起来方便;迭代器法居中,但是安全。 //结束时间 //耗时 double t3=(t2-t1)/getTickFrequency(); if (*it>100) { } else { } ++it; ++it1; (*it1)=0; (*it1)=255; //获得初始位置迭代器

本文来源:https://www.bwwdw.com/article/ldq4.html

Top