OpenCV 像素的读取与操作

像素读取和操作

1. 利用cv::Matat函数,直接访问具体地址

void get_setImagePixel(char *imagePath, int x, int y){//  Mat image = imread(imagePath , 0);Mat image = imread(imagePath, 1);//得宽高int w = image.cols;int h = image.rows;int channels = image.channels();if (x < w && y < h){//灰度图,像素为单通道if (channels == 1){int pixel = image.at<uchar>(x, y);cout << "灰度图像,处的灰度值为" << pixel << endl;}else{//通过实验,彩色图像的默认存储是bgr, 且存储的格式如下//读取int b = image.at<Vec3b>(x, y)[0]; // b = image.at<uchar>(x,y*3);cout << b << endl;int g = image.at<Vec3b>(x, y)[1]; //g = image.at<uchar>(x, y * 3 + 1);cout << g << endl;int r = image.at<Vec3b>(x, y)[2]; //r = image.at<uchar>(x, y * 3 + 1);cout << r << endl;//设置像素值image.at<Vec3b>(x, y)[0] = 255;image.at<Vec3b>(x, y)[1] = 255;image.at<Vec3b>(x, y)[2] = 255;}}imshow("cc", image);}

 

2. 利用Mat prt 函数:行首地址访问

void get_setImagePixel2(char *imagePath, int x, int y){Mat image = imread(imagePath, 1);//得宽高int w = image.cols;int h = image.rows;int channels = image.channels();//如果图像连续 ,可以将数据转化为1维数组,提高访问效率,但对少量像素访问就没必要//if (image.isContinuous())//{//  //reshape函数用于改变矩阵维度 //  //图像行数为1,列数为原先的行数乘上列数 //  image.reshape(1, image.cols*image.rows);//}//获得第y行的首地址uchar *data = image.ptr<uchar>(y);int position = x*channels;if (channels == 1){int pixel = data[position];cout << "灰度图像,处的灰度值为" << pixel << endl;}else{//通过实验,彩色图像的默认存储是bgr, 且存储的格式如下//读取int b = data[position];cout << b << endl;int g = data[position+1];cout << g << endl;int r = data[position+2];cout << r << endl;//设置像素值data[position] = 255;data[position+1] = 255;data[position+2] = 255;}imshow("cc", image);}

3. 利用迭代器遍历图像
 

void get_setImagePixel3(char *imagePath, int x, int y){Mat image = imread(imagePath, 1);//得宽高int w = image.cols;int h = image.rows;int channels = image.channels();if (channels == 1){//得到初始位置的迭代器 Mat_<uchar>::iterator it = image.begin<uchar>();//得到终止位置的迭代器 Mat_<uchar>::iterator itend = image.end<uchar>();int pixel = *(it + y * w + x);cout << "灰度图像,处的灰度值为" << pixel << endl;}else{//得到初始位置的迭代器 Mat_<Vec3b>::iterator it = image.begin<Vec3b>();//得到终止位置的迭代器 Mat_<Vec3b>::iterator itend = image.end<Vec3b>();//读取it = it + y * w + x;int b = (*it)[0];cout << b << endl;int g = (*it)[1];cout << g << endl;int r = (*it)[2];cout << r << endl;//设置像素值(*it)[0] = 255;(*it)[1] = 255;(*it)[2] = 255;}imshow("cc", image);}

若是大量访问数据和更改数据时用第二种方式效率高。

Node: 在修改像素时候,最好先用变量存储,设定好了再赋值给Mat成员对象,如data,因为如果直接进行操作时,当一个分量值大于255时,向前进1的原则,则会修改前面像素的值,如下:

id colorReduce(cv::Mat&image, int div){int nl = image.rows; //图像的行数 //图像每行的像素数 int nc = image.cols * image.channels();for (int j = 0; j<nl; j++){//得到第j行的首地址 uchar* data = image.ptr<uchar>(j);//遍历每行的像素 for (int i = 0; i<nc; i++){//printf("%d    ", data[i]);//data[i] = data[i] / div*div + 6;// 这里需要用c来存储,因为如果大于255时会向前进1,则影响前面的像素,data[i] 会自己变得小255int c = data[i] / div*div + 100;       data[i] =  c > 255 ? 255 : c;    //将每个像素值都变为div的倍数,即将颜色数缩减了div倍                        }}

 

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

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

相关文章

[http]HTTP状态码含义

HTTP状态码 当浏览者访问一个网页时&#xff0c;浏览者的浏览器会向网页所在服务器发出请求。当浏览器接收并显示网页前&#xff0c;此网页所在的服务器会返回一个包含HTTP状态码的信息头&#xff08;server header&#xff09;用以响应浏览器的请求。 HTTP状态码的英文为HTTP …

不等式约束的拉格朗日乘数法_Abaqus血管支架仿真|接触约束执行方式

根据支架的建模基础、几何和网格划分、单元选择、材料和截面属性、分析步设置、载荷接触和约束、收敛调整&#xff0c;以及后处理、参数优化等内容。接着Abaqus血管支架仿真|建模基础、Abaqus血管支架仿真|几何和网格划分、Abaqus血管支架仿真|单元选择、Abaqus血管支架仿真|材…

OpenCV形态学运算

1.OpenCV形态学运算morphologyEx&#xff08;开运算 、闭运算 、形态学梯度 、顶帽运算 、黑帽运算 、腐蚀运算 、膨胀运算 、击中击不中运算&#xff09; void cv::morphologyEx (InputArray src,OutputArray dst,int op,InputArray kernel,Point anchor Point(-1,-1),int …

python判断成绩等级_Python计算山东新高考选考科目卷面原始成绩为等级成绩

原标题&#xff1a;Python计算山东新高考选考科目卷面原始成绩为等级成绩图书详情&#xff1a;配套资源&#xff1a;用书教师可以免费获取教学大纲、教案、课件、源码、习题答案、课堂管理与考试系统。山东省新高考政策33中&#xff0c;考生必考科目有语文、数学、英语&#xf…

java web ee_Java EE 6 Web配置文件。 在云上。 简单。

java web eeJava SE还可以。 Java EE是邪恶的。 这就是我一直想的。 好吧&#xff0c;现在不再了。 让我分享我的经验。 几周前&#xff0c;我开始考虑将旧版spring hibernate tomcat应用程序移植到新平台上&#xff1a; SAP NetWeaver云 。 我知道您在极客那里的想法&…

帆软报表(finereport) 饼图联动

饼图联动&#xff1a;点击饼图1&#xff0c;饼图2和饼图3显示饼图1的关联数据&#xff0c;接着点击饼图2&#xff0c;饼图3显示饼图2的关联数据&#xff0c;点击上方清除级联&#xff0c;饼图则恢复默认展示状态 下面以上图示例效果为例&#xff0c;说明制作过程。 1.为每个饼图…

中值滤波medianBlur

C: void medianBlur(InputArray src, OutputArray dst, int ksize) 参数解释&#xff1a; . InputArray src: 输入图像&#xff0c;图像为1、3、4通道的图像&#xff0c;当模板尺寸为3或5时&#xff0c;图像深度只能为CV_8U、CV_16U、CV_32F中的一个&#xff0c;如而对于较大…

wxpython下载缓慢_我可以在wxPython的wx.grid.Grid中加速优化GridCellAttr的使用吗?

设置单元格属性将新GridCellAttr添加到GridCellAttrProvider名单。 随着列表的增长&#xff0c;查找单元格的特定属性(通过遍历列表和比较坐标)变得越来越慢。您可以尝试通过PyGridTableBase.SetAttr和GetAttr(例如使用字典)实现自己的加快步伐&#xff1a;编辑&#xff1a;更新…

特性和混入不是面向对象的

让我立刻说&#xff0c;我们将在这里讨论的功能是那些迫切需要进行放线手术的人带给面向对象编程的纯粹的毒药 &#xff0c;就像David West在他的《 Objecting Thought》一书中所建议的那样。 这些功能具有不同的名称&#xff0c;但最常见的是traits和mixins 。 我很不明白&…

模板匹配matchTemplate

C: void matchTemplate(InputArray image, InputArray templ, OutputArray result, int method); image&#xff1a;输入图像。必须为8位或者32位的浮点型。 templ&#xff1a;用于搜索的模板图像。必须小于输入图像并且是一样的数据类型。 result&#xff1a;匹配…

pandas处理csv

import pandas as pd from pandas import Series,DataFrame 打开csv文件 deli pd.read_csv(../得力.csv) 转换为DataFrame数据类型 df DataFrame(datadeli) 更改列名 df.rename(columns{"title":"商品名称","price":"价格","pr…

php 随机在文章中添加锚文本_SEO站长布局锚文本时的7大注意事项

通过对什么是锚文本链接、锚文本作用的讲解&#xff0c;以及怎样布局网站站内锚文本的介绍。相信大家都有了比较清晰的认识&#xff0c;也会重视网站锚文本的建设。但是菜鸟菌还是不得不再啰嗦点&#xff0c;锚文本虽然好处大大的&#xff0c;在布局锚文本的时候还是注意以下几…

OpenCV rectangle

void rectangle(Mat& img, Point pt1,Point pt2,const Scalar& color, int thickness1, int lineType8, int shift0) img 图像. pt1 矩形的一个顶点。 pt2 矩形对角线上的另一个顶点 color 线条颜色 (RGB) 或亮度&#xff08;灰度图像 &#xff09;(grayscale image…

【Java】NIO中Selector的select方法源码分析

该篇博客的有些内容和在之前介绍过了&#xff0c;在这里再次涉及到的就不详细说了&#xff0c;如果有不理解请看【Java】NIO中Channel的注册源码分析&#xff0c; 【Java】NIO中Selector的创建源码分析 Selector的创建在Windows下默认生成WindowsSelectorImpl对象&#xff0c;那…

简单小程序代码_小程序该如何运营

小型程序升级有三种最重要的方法&#xff1a;1.借助微信附近小程序功能实现客户扩展大家可能都知道&#xff0c;微信平台具有附近小程序的功能。此功能使用户可以查看周围五公里范围内的所有小程序。正是由于这个原因&#xff0c;一旦商人完成了这个小程序并加入了附近的小程序…

在javafx中界面主题_最小的JavaFX演示文稿(在JavaFX中)

在javafx中界面主题如果您要进行有关JavaFX的演示&#xff0c;那么使用JavaFX本身进行演示非常方便。 这样&#xff0c;您无需离开演示文稿即可轻松显示示例。 这是一个非常简单的示例。 在NetBeans中&#xff0c;设置一个新的JavaFX项目“ New Project”->“ JavaFX”->…

OpenCV cvLine

cvLine 函数原型&#xff1a; void cvLine( CvArr* img, CvPoint pt1, CvPoint pt2, CvScalar color, int thickness1, int line_type8, int shift0 ); img 图像。pt1 线段的第一个端点。pt2 线段的第二个端点。color 线段的颜色。thickness 线段的粗细程度。line_type 线段…

lengthOfLongestSubstring

lengthOflongestSubstring 试例&#xff1a; 输入: "abcabcbb" 输出: 3 解释: 因为无重复字符的最长子串是 "abc"&#xff0c;所以其长度为 3。 /**** param {string} s* 无重复字符的最长子串*/ function lengthOfLongestSubstring(s) {if (typeof s ! s…

编译原理--词法分析C++

一、实验项目要求 1.实验目的 通过设计编制调试一个具体的词法分析程序&#xff0c;加深对词法分析原理的理解。并掌握在对程序设计语言源程序进行扫描过程中将其分解为各类单词的词法分析方法。 编制一个读单词过程&#xff0c;从输入的源程序中&#xff0c;识别出各个具有…

python list转map_Python 进阶之术 Map Filter Reduce

" 本文字数&#xff1a;763 字 || 阅读时间&#xff1a;3分钟"Map Map 会将⼀个函数映射到⼀个输⼊列表的所有元素上。这是它的规范&#xff1a;规范 map(function_to_apply, list_of_inputs) ⼤多数时候&#xff0c;我们要把列表中所有元素⼀个个地传递给⼀个函数&a…