opencv2.4.3經過不一樣方式訪問圖像像素

經過不一樣方式訪問圖像像素 ios

最近在學習vs2010並結合opencv2.4.3進行圖像處理,首先研究了在opencv中如何去訪問像素,查閱資料,瀏覽博客,總結了一下,通常有三種方法:Mat類的.at()函數,指針,迭代器,代碼以下:安全

// sy1.cpp : 定義控制檯應用程序的入口點。函數

/////////////////////////////經過不一樣的方式去訪問圖像像素/////////////////////////////////////////////學習

#include "stdafx.h"ui

#include "opencv2/highgui/highgui.hpp"spa

#include "opencv2/core/core.hpp"指針

#include "opencv2/imgproc/imgproc.hpp"xml

#include <iostream>get

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()函數法最慢,可是理解起來方便;迭代器法居中,可是安全。

相關文章
相關標籤/搜索