OpenCV学习笔记(二):3种常用访问图像中像素的方式

OpenCV学习笔记(二):3种常用访问图像中像素的方式

#include <opencv2/opencv.hpp>using namespace cv;
using namespace std;int main()
{//【1】创建原始图并显示Mat srcImage = imread("F:/C++/2. OPENCV 3.1.0/TEST/11.jpg");imshow("原始图像",srcImage);//【2】按原始图的参数规格来创建创建效果图Mat dstImage;dstImage.create(srcImage.rows,srcImage.cols,srcImage.type());//效果图的大小、类型与原图片相同//【3】记录起始时间double time0 = static_cast<double>(getTickCount());//【4】调用颜色空间缩减函数colorReduce(srcImage,dstImage,32);//【5】计算运行时间并输出time0 = ((double)getTickCount() - time0)/getTickFrequency();cout<<"此方法运行时间为: "<<time0<<"秒"<<endl;  //输出运行时间//【6】显示效果图imshow("效果图",dstImage);waitKey(0);
}

一、指针访问,C操作符方式:

void colorReduce(Mat& inputImage, Mat& outputImage, int div)
{//参数准备outputImage = inputImage.clone();  //拷贝实参到临时变量int rowNumber = outputImage.rows;  //行数int colNumber = outputImage.cols*outputImage.channels();  //列数 x 通道数=每一行元素的个数//双重循环,遍历所有的像素值for (int i = 0; i < rowNumber; i++)  //行循环{uchar *data = outputImage.ptr<uchar>(i);  //获取第i行的首地址for (int j = 0; j < colNumber; j++) {// 处理每个像素每个元素data[j] = data[j] / div*div + div / 2;}  }
}

二、迭代器方式:

void colorReduce(Mat& inputImage, Mat& outputImage, int div)  
{  	//参数准备outputImage = inputImage.clone();  //拷贝实参到临时变量//获取迭代器Mat_<Vec3b>::iterator it = outputImage.begin<Vec3b>();		//初始位置的迭代器Mat_<Vec3b>::iterator itend = outputImage.end<Vec3b>();		//终止位置的迭代器(超出末端迭代器)//存取彩色图像像素,对每个通道for(;it != itend;++it)  {  (*it)[0] = (*it)[0]/div*div + div/2;  //蓝色通道(*it)[1] = (*it)[1]/div*div + div/2;  //绿色通道(*it)[2] = (*it)[2]/div*div + div/2;  //红色通道}  
}  

三、动态地址计算方式:

void colorReduce(Mat& inputImage, Mat& outputImage, int div)
{//参数准备outputImage = inputImage.clone();  //拷贝实参到临时变量int rowNumber = outputImage.rows;  //行数int colNumber = outputImage.cols;  //列数//存取彩色图像像素for(int i = 0;i < rowNumber;i++){for(int j = 0;j < colNumber;j++){outputImage.at<Vec3b>(i,j)[0] =  outputImage.at<Vec3b>(i,j)[0]/div*div + div/2;  //第i行j列元素的蓝色通道outputImage.at<Vec3b>(i,j)[1] =  outputImage.at<Vec3b>(i,j)[1]/div*div + div/2;  //绿色通道outputImage.at<Vec3b>(i,j)[2] =  outputImage.at<Vec3b>(i,j)[2]/div*div + div/2;  //红色通道}  }
}
// 动态地址,创建渐变色图Mat mat(480,640,CV_8UC4);for (int i = 0; i < mat.rows; ++i){for (int j = 0; j < mat.cols; ++j){Vec4b& rgba = mat.at<Vec4b>(i, j);rgba[0] = UCHAR_MAX;rgba[1] = saturate_cast<uchar>((float(mat.cols - j)) / ((float)mat.cols) *UCHAR_MAX);rgba[2] = saturate_cast<uchar>((float(mat.rows - i)) / ((float)mat.rows) *UCHAR_MAX);rgba[3] = saturate_cast<uchar>(0.5 * (rgba[1] + rgba[2]));}}imshow("PNG 图", mat);

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/491207.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

水题 UVA 1586 - Ancient Cipher化学式分子量计算

原题见&#xff1a;http://acm.hust.edu.cn/vjudge/contest/view.action?cid106424#overview 题目要求&#xff0c;根据所给化学量与原子量计算化学式的相对分子质量。。。其实就是怎么对应起来的事。 代码如下&#xff1a; 1 #include <stdio.h>2 //给出一种物质的分子…

【边缘计算】边缘计算元年一文看懂云边协同!九大场景带来新一轮信息革命...

来源&#xff1a;产业智能官2019 年边缘计算备受产业关注&#xff0c;一度引起了资本市场的投资热潮&#xff0c;很多人把 2019 年称作边缘计算的元年。理性来看&#xff0c;造成如此火爆局势难免有一些炒作因素在推波助澜&#xff0c;毕竟边缘计算的概念存世也已多年。当然&am…

OpenCV学习笔记(三):多通道图像分离、混合算子:split(),merge()

OpenCV学习笔记&#xff08;三&#xff09;&#xff1a;多通道图像分离、混合算子&#xff1a;split(),merge() #include <opencv2/opencv.hpp>#define BRG_BLUE_CHANNEL 0 #define BRG_GREEN_CHANNEL 1 #define BRG_RED_CHANNEL 2using namespace cv;int main(int argc…

pytorch两种常用的学习率衰减方法

阶梯式衰减 torch.optim.lr_scheduler.StepLR(optimizer, step_size, gamma0.1, last_epoch-1) 每个训练step_size个epoch&#xff0c;lr会自动乘以gamma LR 0.01 optimizer Adam(model.parameters(),lr LR) scheduler torch.optim.lr_scheduler.StepLR(optimizer,step_s…

[转]retina屏下支持0.5px边框的情况

2014-12-31更新&#xff1a;截至到IOS8.1&#xff0c;safari仍不支持supports待safari支持supports, 就可以利用0.5px了&#xff01; 2014-7-25更新&#xff1a;1. 修正dpr 1.5 机器下四角边框的缩放比例&#xff1b;2. 修正右边框&#xff08;rBor&#xff09;的transform-or…

心理所发表关于神经科学研究可信度的评论文章

来源&#xff1a;文章来源&#xff1a;心理研究所 作为人类特有的行为&#xff0c;科学研究是社会文明的重要推动力量之一。近年来&#xff0c;研究的可重复性问题成为科学关注的焦点&#xff0c;从心理科学到临床医学等领域&#xff0c;研究的可重复性成为巨大挑战。生命科学研…

OpenCV学习笔记(三):图像对比度、亮度调整源码

OpenCV学习笔记&#xff08;三&#xff09;&#xff1a;图像对比度、亮度调整源码 主函数&#xff1a; #include <opencv2/opencv.hpp>using namespace cv;using namespace std;int g_nContrastValue80; //对比度值int g_nBrightValue80; //亮度值Mat g_srcImage, g_ds…

MATLAB xlswrite函数出现“错误: 服务器出现意外情况”

打开Excel&#xff0c;点击文件→选项→加载项&#xff0c;选择COM加载项 点击转到&#xff0c;将福昕阅读器前面的√去掉即可

神秘的中国超算:比肩高铁的世界级领先

来源&#xff1a;21Tech2019年4月&#xff0c;一张类似燃烧中蜂窝煤的照片传遍全世界——这是人类历史上首次得见“黑洞”的真容。实际上&#xff0c;关于黑洞的照片早在2017年4月历经十余天已拍摄完毕&#xff0c;此后&#xff0c;便是将来自全球8架射电望远镜收集到的数据进行…

OpenCV示例学习(七):离散傅里变换(DFT)算子:getOptimalDFTSize(),copyMakeBorder(),magnitude(),log(),normalize()

OpenCV示例学习&#xff08;七&#xff09;&#xff1a;离散傅里变换&#xff08;DFT&#xff09;算子&#xff1a;getOptimalDFTSize(),copyMakeBorder(),magnitude(),log(),normalize() #include <opencv2/opencv.hpp>using namespace cv;int main(int argc, char *ar…

OpenCV学习笔记(四):XML,YAML(.txt,.doc)文件读写操作

OpenCV学习笔记&#xff08;四&#xff09;&#xff1a;XML,YAML(.txt,.doc)文件读写操作 一、Write_XML_and_YAML_File&#xff08;写入XML&#xff09; #include <opencv2/opencv.hpp> #include <time.h>using namespace cv;int main() {// 1、准备文件写操作F…

“用手机就能访问卫星” 软件定义升级卫星智能

▲“天智一号”是全球首颗实际开展工程研制并发射的软件定义卫星。软件所供图来源&#xff1a; 中国科学报▲专家学者探讨开源、开放的航天生态环境。沈春蕾摄“假设未来30年将发射10万颗&#xff0c;这些卫星该怎么造、怎么算、怎么用&#xff1f;”在日前召开的2019软件定义卫…

python的print函数输出带颜色字体

格式&#xff1a;print(\033[显示方式&#xff1b;前景色&#xff1b;背景色m 需要显示的文字 \033[0m) 其中"\033[显示方式&#xff1b;前景色&#xff1b;背景色m"是开头部分&#xff0c;"\033[0m"是结尾部分 说明&#xff1a; 开头部分有三个参数&…

OpenCV学习笔记(五):线性滤波-方框、均值、高斯:boxFilter(),blur(),GaussianBlur()

OpenCV学习笔记&#xff08;五&#xff09;&#xff1a;线性滤波-方框、均值、高斯&#xff1a;boxFilter(),blur(),GaussianBlur() 线性滤波&#xff1a;即多个信号之和的响应和它们各自响应之和相等。 参考&#xff1a; https://blog.csdn.net/poem_qianmo/article/details/…

NB-IoT与LoRa,两马领跑物联网竞赛,谁将最终胜出?

来源&#xff1a;电子工程专辑HS Markit报告指出&#xff0c;曾经广泛开放的LPWAN市场领域开始明显紧缩&#xff0c;不过仍处于初期发展阶段。2018年只有1.5亿个LPWAN链路被布署&#xff0c;到2023年NB-IoT与LoRa可望占据所有LPWAN链路的86%......根据市场研究机构IHS Markit发…

【全文】Libra回应质疑:Facebook将放弃控制权,不与主权货币竞争

Facebook的全球数字货币计划Libra遭到多方抨击质疑之后&#xff0c;将于明日直面国会听证会。目前Facebook能否发行数字货币&#xff0c;悬于监管机构的许可决定&#xff0c;而这也会成为数字货币命运的一个重要转折点。Libra项目的负责人David Marcus提前发布了他的证词。硅星…

Git从零教你入门(4):Git服务之 gogs部署安装

Git从零入门系列4:先看上一篇文章&#xff1a;http://www.51testing.com/index.php?uid-497177-action-viewspace-itemid-3706817今日主题&#xff1a;gogs安装部署环境&#xff1a;centos安装包地址&#xff1a;https://dl.gogs.io/gogs_v0.8.25_linux_amd64.zip部署步骤&…

OpenCV学习笔记(六):非线性滤波-中值、双边:medianBlur(),bilateralFilter()

OpenCV学习笔记&#xff08;六&#xff09;&#xff1a;非线性滤波-中值、双边&#xff1a;medianBlur(),bilateralFilter() 1、中值滤波&#xff08;Median filter&#xff09; 是一种典型的非线性滤波技术&#xff0c;基本思想是用像素点邻域灰度值的中值来代替该像素点的灰…

Batch Normalization原理及pytorch的nn.BatchNorm2d函数

下面通过举个例子来说明Batch Normalization的原理&#xff0c;我们假设在网络中间经过某些卷积操作之后的输出的feature map的尺寸为4322&#xff0c;4为batch的大小&#xff0c;3为channel的数目&#xff0c;22为feature map的长宽 整个BN层的运算过程如下图&#xff1a; 上…

OpenCV学习笔记(八):形态学morpholgy(2):开/闭运算,形态学梯度、顶帽/黑帽morphologyEx()

OpenCV学习笔记&#xff08;八&#xff09;&#xff1a;形态学morpholgy(2)&#xff1a;开、闭运算&#xff0c;形态学梯度、顶帽、黑帽&#xff1a;morphologyEx() 数学形态学&#xff08;Mathematical morphology&#xff09; 是一门建立在格论和拓扑学基础之上的图像分析学…