访问像素

a.使用指针

#include <opencv.hpp>
using namespace cv;
using namespace std;
int main()
{
	//指针访问每个像素并赋值
	Mat img = imread("001.jpg");
	for (int i = 0; i < img.rows; i++)
	{
		uchar* data = img.ptr<uchar>(i); // 获取每i行的首地址
		for (int j = 0; j < (img.cols*img.channels())/*列数乘以通道数*/; j++)
			data[j] = 200;
	}
	imshow("2", img);
	waitKey(0);

	return 0;
}

b.通过迭代器

#include <opencv.hpp>
using namespace cv;
using namespace std;
int main()
{
	//使用迭代器
	Mat img = imread("001.jpg");
	Mat_<Vec3b>::iterator it = img.begin<Vec3b>(); // 迭代器的初始位置
	Mat_<Vec3b>::iterator itend = img.end<Vec3b>(); // 迭代器的终止位置
	for (; it != itend; it++)
	{
		(*it)[0] = 0;
		(*it)[2] = 0;
		(*it)[1] = 255;
	}
	imshow("2", img);
	waitKey(0);

	return 0;
}

c.通过地址计算

#include <opencv.hpp>
using namespace cv;
using namespace std;
int main()
{
	//动态地址计算 use .at
	Mat img = imread("001.jpg");
	for (int i = 0; i < img.rows; i++)
	for (int j = 0; j < img.cols; j++)
	{
		img.at<Vec3b>(i, j)[0] = 0;
		img.at<Vec3b>(i, j)[1] = 0;
		img.at<Vec3b>(i, j)[2] = 244;
	}
	imshow("2", img);
	waitKey(0);

	return 0;
}

  

其中指针的访问速度最快,迭代器更方便和安全。

 

时间: 2024-08-01 10:31:57

访问像素的相关文章

opencv2中访问像素的简单方法

利用Mat的step[0],step[1]访问像素的行列,自定义一个宏CV_MAT_ELEM2(src,dtype,y,x),src是待访问的Mat,dtype是src的数据类型(int,float,char等), 访问像素位置是y行.x列. 宏定义如下: #define CV_MAT_ELEM2(src,dtype,y,x) \ (dtype*)(src.data+src.step[0]*y+src.step[1]*x)演示代码如下所示: #include <iostream> #inclu

访问像素的三种方法

方法一:用指针访问像素 1 #include <opencv2/opencv.hpp> 2 #include <opencv2/core/core.hpp> 3 #include <opencv2/highgui/highgui.hpp> 4 using namespace cv; 5 using namespace std; 6 void colorReduce(Mat &inputImage,Mat& outputImage,int div) 7 {

OpenCV——颜色缩减、计时函数、访问像素

1 //颜色空间缩减 2 //src:源图片 3 //dst:目标图片 4 //divideWith:缩减宽度 5 void ColorSpaceReduction(Mat src,int divideWith,Mat& dst) 6 { 7 //创建查询用的表 8 uchar table[256]; 9 for (int i = 0; i < 256; ++i) 10 table[i] = divideWith * (i / divideWith); 11 //创建mat型用于LUT函数查

CImage访问像素及其像素操作总结

MSDN的代码 COLORREF pixel; int maxY = imgOriginal.GetHeight(), maxX = imgOriginal.GetWidth(); byte r,g,b,avg; for (int y=0; y<maxY; y++) { for (int x=0; x<maxX; x++) { pixel = imgOriginal.GetPixel(x,y); r = GetRValue(pixel); g = GetGValue(pixel); b = G

Opencv利用Mat访问像素值

如果是采用Mat形式存储,想要访问灰度图像的灰度值,可以采用如下方法: 如果是彩色图像,采用如下方法: 说明: 其中gray_value中存放灰度值,image是读入的图像,i表示行,j表示列: color_value中存放彩色像素值,iamge是读入的图像,i表示行,j表示列,k表示通道,即R.G.B,取值范围为2.1.0.

opencv 3.1.0 访问像素值的三种方法(C++)

三种方法分别问: 指针访问:void colorReduce_ptr(cv::Mat &inputImage, cv::Mat &outputImage, int div); 迭代器访问:void colorReduce_iterator(cv::Mat &inputImage, cv::Mat &outputImage, int div); 动态地址计算:void colorReduce_at(cv::Mat &inputImage, cv::Mat &o

Opencv 与C#.Net版本开发,并访问像素的方法

一.一般来说都是采用C++与opencv联合开发.这里尝试C#与opencv如何联合开发. 1.直接下载emgucv.我下载的是3.2.0.2682版本.百度搜索就有下载,虽然是外网但是没被墙. 2.下载之后安装好,并设置好环境变量然后重启. 3.以下是它的调用方式.这里只用了Emgu.CV.UI.dll,与Emgu.CV.World.dll.其中比较重要的类有CvInvoke,大部分opencv有的功能都有. 二.这里写一个操作像素的方法.(官方版本,网上有些基佬写的有些麻烦了) 1.创建项目

opencv高效访问图像像素(遍历像素的方法总结)

一.Accessingpixel values访问像素值.(用类自带的方法:方便,但效率不高) 1.      cv::Mat has the a templatemethod at(int y, int x) 用法image.at<cv::Vec3b>(j,i)[channel]= value; 注意事项:the programmer needs to specify the return type that is expected(需认为指定返回值类型),一般使用type cv::Vec3

opencv 访问图像像素的三种方式

访问图像中的像素 访问图像像素有三种可行的方法方法一:指针访问指针访问访问的速度最快,Mat类可以通过ptr函数得到图像任意一行的首地址,同时,Mat类的一些属性也可以用到公有属性 rows和cols 表示行和列通道数可以通过channels()函数获得:void visitPix1(){ Mat srcImg = imread("jpg/1.jpeg"); Mat dstImg; srcImg.copyTo(dstImg); int rowNum = dstImg.rows; int