Opencv --- 图像像素遍历的各种方法
#include <opencv2/core.hpp>
#include <opencv2/imgcodecs.hpp>
#include <opencv2/highgui.hpp>
#include <iostream>
using namespace cv;
using namespace std; // 记录时间信息
void PrintMs(const char *text = "")
{
static long long last = ;
long long cur = getTickCount();
if (last == )
{
last = cur;
return;
}
long long ms = ;
ms = ((double)(cur - last) / getTickFrequency()) * ;
if (*text != )
{
printf("%s = %dms\n", text,ms);
}
last = getTickCount();
}
int main(int argc, char *argv[])
{
Mat mat(, , CV_8UC3);
//mat.create(3000, 4000, CV_8UC3);
//元素大小字节数
int es = mat.elemSize();
int size = mat.rows*mat.cols*es; //地址遍历连续的Mat
PrintMs();
for (int i = ; i < size; i += es)
{
mat.data[i] = ; //B
mat.data[i + ] = ;//G
mat.data[i + ] = ;//R
}
PrintMs("mat.data ms"); //地址遍历不一定连续的Mat
for (int row = ; row < mat.rows; row++)
{
for (int col = ; col < mat.cols; col++)
{
(&mat.data[row*mat.step])[col*es] = ;//B
(&mat.data[row*mat.step])[col*es+] = ;//G
(&mat.data[row*mat.step])[col*es+] = ;//R
}
}
PrintMs("mat.step ms"); //使用ptr遍历Mat
for (int row = ; row < mat.rows; row++)
{
for (int col = ; col < mat.cols; col++)
{
Vec3b *c = mat.ptr<Vec3b>(row, col);
c->val[] = ; //B
c->val[] = ; //G
c->val[] = ; //R
}
}
PrintMs("mat.ptr ");
try
{
//使用at来遍历
for (int row = ; row < mat.rows; row++)
{
for (int col = ; col < mat.cols; col++)
{
Vec3b &m = mat.at<Vec3b>(row, col);
m[] = ;
m[] = ;
m[] = ;
}
}
PrintMs("mat.at");
}
catch (Exception &ex)
{
cout << ex.what() << endl;
} //通过迭代器来遍历
PrintMs("");
auto it = mat.begin<Vec3b>();
auto it_end = mat.end<Vec3b>();
for (; it != it_end; it++)
{
(*it).val[] = ; //B
(*it).val[] = ; //G
(*it).val[] = ; //R
}
PrintMs("mat.itr"); namedWindow("mat");
imshow("mat", mat);
waitKey(); return ;
}
Opencv --- 图像像素遍历的各种方法的更多相关文章
- opencv图像像素值读取
说到图像像素,肯定要先认识一下图像中的坐标系长什么样. 1. 坐标体系中的零点坐标为图片的左上角,X轴为图像矩形的上面那条水平线:Y轴为图像矩形左边的那条垂直线.该坐标体系在诸如结构体Mat,Rect ...
- bitmap的图像像素遍历方法
public class FastBitmap { BitmapData bitmapData; public FastBitmap(Bitmap bitmap) { ,,bitmap.Width,b ...
- opencv图像阈值设置的三种方法
1.简单阈值设置 像素值高于阈值时,给这个像素赋予一个新值(可能是白色),否则我们给它赋予另外一种颜色(也许是黑色).这个函数就是 cv2.threshhold().这个函数的第一个参数就是原图像 ...
- OpenCv图像像素操作
1:像素 有两种直接操作像素点的方法: 第一种: 将其转化为numpy.array格式,直接进行操作. 第二种:使用Opencv提供的Get1D,Get2D等函数. 2:获取行和列像素 有一下四个函数 ...
- opencv 访问图像像素的三种方式
访问图像中的像素 访问图像像素有三种可行的方法方法一:指针访问指针访问访问的速度最快,Mat类可以通过ptr函数得到图像任意一行的首地址,同时,Mat类的一些属性也可以用到公有属性 rows和cols ...
- opencv——图像遍历以及像素操作
摘要 我们在图像处理时经常会用到遍历图像像素点的方式,在OpenCV中一般有四种图像遍历的方式,在这里我们通过像素变换的点操作来实现对图像亮度和对比度的调整. 补充: 图像变换可以看成 像素变换--点 ...
- Opencv中图像的遍历与像素操作
Opencv中图像的遍历与像素操作 OpenCV中表示图像的数据结构是cv::Mat,Mat对象本质上是一个由数值组成的矩阵.矩阵的每一个元素代表一个像素,对于灰度图像,像素是由8位无符号数来表示(0 ...
- OpenCV成长之路(2):图像的遍历
我们在实际应用中对图像进行的操作,往往并不是将图像作为一个整体进行操作,而是对图像中的所有点或特殊点进行运算,所以遍历图像就显得很重要,如何高效的遍历图像是一个很值得探讨的问题. 一.遍历图像的4种方 ...
- Mat中两种像素遍历方法比较
小白,入门中,不足其指正.刚刚接触opencv,从一个Matlab风格的编程环境突然跳转到C++,实在有些不适.单就pixels scanning花了好长时间研究.opencv-tutorials给出 ...
随机推荐
- 命名空间namespace ,以及重复定义的问题解析
名字空间是用来划分冲突域的,把全局名字空间划分成几个小的名字空间.全局函数,全局变量,以及类的名字是在同一个全局名字空间中,有时为了防止命名冲突,会把这些名字放到不同的名字空间中去. 首先我们看一下名 ...
- 原生js:click和onclick本质的区别
原生javascript的click在w3c里边的阐述是DOM button对象,也是html DOM click() 方法,可模拟在按钮上的一次鼠标单击. button 对象代表 HTML 文档中的 ...
- Basic4android v3.80 beta 发布
增加了条件编译,共享模块,部分支持jar 文件直接访问.还有其他一些更新. I'm happy to release B4A v3.80 BETA. This version includes sev ...
- python之基础补充
一 bit,和bytes的关系 bit:就是计算机的最小的表示单位. bytes:就是计算机的最小的储存单位. 1 字节(bytes) = 8 位(bit) 格式: print(bytes('字符' ...
- Radius 中 与Response Authernticator 与 Message-Authenticator的计算
/* String RequestStr3 = @"01 00 00 9E EB B2 E8 D9 1E 52 10 03 FB E1 52 39 27 58 93 F0 01 0E 33 ...
- String、StringBuffer与StringBuilder之间区别(转)
最近学习到StringBuffer,心中有好些疑问,搜索了一些关于String,StringBuffer,StringBuilder的东西,现在整理一下. 关于这三个类在字符串处理中的位置不言而喻,那 ...
- java NIO编程(转)
一.概念 在传统的java网络编程中,都是在服务端创建一个ServerSocket,然后为每一个客户端单独创建一个线程Thread分别处理各自的请求,由于对于CPU而言,线程的开销是很大的,无限创建线 ...
- SPSS-Friedman 秩和检验-非参数检验-K个相关样本检验 案例解析
三人行,必有我师,是不是真有我师?三种不同类型的营销手段,最终的营销效果是否一样,随即区组秩和检验带你进入分析世界 今天跟大家讨论和分享一下:spss-Friedman 秩和检验-非参数检验-K个(多 ...
- 对比手机SLAM和机器人SLAM
陀螺仪?? IMU?? 加速度器与?? 人与机器 惯性定位与?? 步骤上对比Project Tango与SLAM
- ROS教程
Learning ROS 学习ROS Depending on your learning style and preferences, you can take two approaches to ...