opencv —— src.at<Vec3b>(i, j)[0]、src.at<uchar>(i, j)、src.ptr<uchar>(i) 访问图像的单个像素
动态地址访问像素:src.at<Vec3b>(i, j)[0]、src.at<uchar>(i, j)
int b = src.at<Vec3b>(i, j)[0];
int g = src.at<Vec3b>(i, j)[1];
int r = src.at<Vec3b>(i, j)[2];
用来访问三通道图像的单个像素。对于三通道图像,每个像素存储了三个值,分别为蓝色、绿色、红色通道上的数值。
int gray_data = gray.at<uchar>(i, j);
用来访问灰度图像的单个像素。对于灰度图像,每个像素只存储一个值。
指针访问像素:src.ptr<uchar>(i)
uchar* src_rows = src.ptr<uchar>(i);
申请一个指针指向每行第一个像素位置,用来遍历一行像素。
当图像为三色通道时,每个像素存储三个值,B、G、R,每行形如 B、G、R、B、G、R、B 。。。
当图像为灰度图像时,每个像素存储一个值。
代码示例:
//将图像手动转换为灰度图
//写法一:
#include<opencv.hpp>
using namespace cv;
int main() {
Mat src = imread("C:/Users/齐明洋/Desktop/1.jpg");
Mat diy_gray = Mat(src.size(), CV_8UC1);
for (int i = ; i < src.rows; i++) {
for (int j = ; j < src.cols; j++) {
int b = src.at<Vec3b>(i, j)[];
int g = src.at<Vec3b>(i, j)[];
int r = src.at<Vec3b>(i, j)[];
double gray_data = 0.114*b + 0.587*g + 0.299*r;
diy_gray.at<uchar>(i, j) =static_cast<uchar>(gray_data);
}
}
imshow("gray1", diy_gray);
waitKey();
} //写法二:
#include<opencv.hpp>
using namespace cv;
int main() {
Mat src = imread("C:/Users/齐明洋/Desktop/1.jpg");
Mat diy_gray = Mat(src.size(), CV_8UC1);
for (int i = ; i < src.rows; i++) {
uchar* src_rows = src.ptr<uchar>(i);
uchar* gray_rows = diy_gray.ptr<uchar>(i);
for (int j = ; j < src.cols*src.channels(); j += src.channels()) {
int b = src_rows[j];
int g = src_rows[j + ];
int r = src_rows[j + ];
double gray_data = 0.114*b + 0.587*g + 0.299*r;
gray_rows[j/src.channels()] = static_cast<uchar>(gray_data);
}
}
imshow("diy_gray", diy_gray);
printf("\n");
waitKey();
}
opencv —— src.at<Vec3b>(i, j)[0]、src.at<uchar>(i, j)、src.ptr<uchar>(i) 访问图像的单个像素的更多相关文章
- 【opencv学习笔记七】访问图像中的像素与图像亮度对比度调整
今天我们来看一下如何访问图像的像素,以及如何改变图像的亮度与对比度. 在之前我们先来看一下图像矩阵数据的排列方式.我们以一个简单的矩阵来说明: 对单通道图像排列如下: 对于双通道图像排列如下: 那么对 ...
- 访问图像中的像素[OpenCV 笔记16]
再更一发好久没更过的OpenCV,不过其实写到这个部分对计算机视觉算法有所了解的应该可以做到用什么查什么了,所以后面可能会更的慢一点吧,既然开了新坑,还是机器学习更有研究价值吧... 图像在内存中的存 ...
- opencv 3 core组件进阶(1 访问图像中的像素)
访问图像像素的三类方法 ·方法一 指针访问:C操作符[ ]; ·方法二 迭代器iterator; ·方法三 动态地址计算. #include <opencv2/core/core.hpp> ...
- 【OpenCV】访问图像中每个像素的值
http://blog.csdn.net/xiaowei_cqu/article/details/7557063
- opencv 访问图像像素的三种方式
访问图像中的像素 访问图像像素有三种可行的方法方法一:指针访问指针访问访问的速度最快,Mat类可以通过ptr函数得到图像任意一行的首地址,同时,Mat类的一些属性也可以用到公有属性 rows和cols ...
- 今天遇到的面试题for(j=0,i=0;j<6,i<10;j++,i++) { k=i+j; } k 值最后是多少?
for(j=0,i=0;j<6,i<10;j++,i++) { k=i+j; } k 值最后是多少? <script type="text/javascript" ...
- zufeoj Electrification Plan (最小生成树,巧妙设e[i][j]=0)
Electrification Plan 时间限制: 1 Sec 内存限制: 128 MB提交: 31 解决: 13[提交][状态][讨论版] 题目描述 Some country has n ci ...
- for(j=0,i=0;j
for(j=0,i=0;j<6,i<10;j++,i++) { k=i+j; } k 值最后是多少? <script type="text/javascript" ...
- opencv学习之路(7)、访问图像像素
一.动态地址访问 #include <opencv2/opencv.hpp> #include<iostream> using namespace cv; using name ...
随机推荐
- ros之发布者和订阅者协同工作
前面的例子显示了单个发布者/单个订阅者的情况,但是一个节点也可以同时是一个发布者和订阅者,或者拥有多个订阅和发布. 实际上,ROS节点最常做的事情是传递消息,并在消息上进行运算. 例doubler.p ...
- kvm实现快速增量盘模式的克隆脚本
转自:http://zxlwz.blog.51cto.com/6952946/1852424 要求:备份的img磁盘格式只有qcow2格式支持增量盘使用和快照功能当你的一个虚拟机格式是raw格式时,请 ...
- 为什么用nginx:它的5个主要优点
1.高并发,高性能 2.可扩展性好啊 3.高可靠性 4.热部署 5.BSD许可证
- Spring Cloud第十三篇 | Spring Boot Admin服务监控
本文是Spring Cloud专栏的第十三篇文章,了解前十二篇文章内容有助于更好的理解本文: Spring Cloud第一篇 | Spring Cloud前言及其常用组件介绍概览 Spring Clo ...
- Java入门基础(类)
类 在Java中表示自定义的数据类型,一个class可以是若干基本类型的组合. public class Student { public String id;//学号 public String n ...
- POJ_2185_二维KMP
http://poj.org/problem?id=2185 求最小覆盖矩阵,把KMP扩展到二维,行一次,列一次,取最小覆盖线段相乘即可. #include<iostream> #incl ...
- centos7 手把手从零搭建深度学习环境 (以TensorFlow2.0为例)
目录 一. 搭建一套自己的深度学习平台 二. 安装系统 三. 安装NVIDA组件 四. 安装深度学习框架 TensorFlow 五. 配置远程访问 六. 验收 七. 福利(救命稻草
- 实例探究Aspectj,解析SentinelResourceAspect
为了学习SentinelResourceAspect,这篇文章里我用Aspectj实现一个AOP实例,一起来看下. Sentinel 提供了 @SentinelResource 注解用于定义资源,支持 ...
- 2020年,手把手教你如何在CentOS7上一步一步搭建LDAP服务器的最新教程
同步滚动:关 什么是LDAP 什么是LDAP? 要想知道一个概念,最简单的办法就是wikipedia,当然也可以百科. LDAP全称是轻型目录访问协议(Lightweight Directory Ac ...
- HttpClient学习整理(一)
Http协议的重要性相信不用我多说了,HttpClient相比传统JDK自带的URLConnection,增加了易用性和灵活性(具体区别,日后我们再讨论),它不仅是客户端发送Http请求变得容易,而且 ...