第五天:opencv-访问图像像素
来源:互联网 发布:查看他人通话记录软件 编辑:程序博客网 时间:2024/06/06 19:37
图像处理通常是对图像像素进行算法分析,所以了解像素的存储方式是尤为重要的。
(1)、图像在内存中的存储方式
图像矩阵的大小取决于所用的颜色模型(或者说通道数),灰度图像矩阵每行每列对应一个元素也就是灰度值,而彩色图像矩阵每行每列对应BGR三种元素的值。
(2)、访问图像像素的方法
a. 动态地址计算访问
eg:
///动态地址访问Mat img = imread("1.jpg");imshow("src", img);Mat dst = img.clone();int rowNumber = img.rows; //获取行数int colNumber = img.cols; //获取列数for(int i = 0; i<rowNumber; i++){for(int j = 0; j<colNumber; j++){dst.at<Vec3b>(i, j)[0] = 255; //蓝色通道dst.at<Vec3b>(i, j)[1] = 0; //绿色通道dst.at<Vec3b>(i, j)[2] = 0; //红色通道}}imshow("dst", dst);waitKey(0);
成员函数at用来读取像素,<Vec3b>表示一个uchar[3]类型的数组,如果是灰度图像用at<uchar>(i,j)=255的形式访问。
b. 指针访问
eg:
///指针访问Mat img = imread("1.jpg");imshow("src", img);Mat dst = img.clone();int rowNumber = img.rows; //获取行数int colNumber = img.cols * img.channels(); //获取每一行的元素for(int i = 0; i<rowNumber; i++){uchar* data = dst.ptr<uchar>(i); //获取每一行首地址for(int j = 0; j<colNumber; j++){switch(j % 3){case 0: //蓝色通道data[j] = 255;break;case 1: //绿色通道data[j] = 0;break;case 2: //红色通道data[j] = 255;break;}}}imshow("dst", dst);waitKey(0);
Mat类提供了ptr函数可以得到图像任意行的首地址
eg:
#include "opencv2/opencv.hpp"#include <iostream>using namespace std;using namespace cv;void main(){///减色算法//Mat img = imread("1.jpg");//imshow("src", img);//Mat dst = img.clone();//int rowNumber = img.rows; //获取行数//int colNumber = img.cols * img.channels(); //获取每一行的元素//for(int i = 0; i<rowNumber; i++)//{//uchar* data = dst.ptr<uchar>(i); //获取每一行首地址//for(int j = 0; j<colNumber; j++)//{//switch(j % 3)//{//case 0: //蓝色通道//data[j] = 64 * 64 + 64/2; //一个减色算法//break;//case 1: //绿色通道//data[j] = 64 * 64 + 64/2;//break;//case 2: //红色通道//data[j] = 64 * 64 + 64/2;//break;//}//}//}//imshow("dst", dst);//waitKey(0);///雪花效果Mat img = imread("1.jpg");imshow("src", img);Mat dst = img.clone();int rowNumber = img.rows; //获取行数int colNumber = img.cols; //获取列数int i, j;for(int k = 0; k< 2000; k++){i = rand() % rowNumber; j = rand() % colNumber; dst.at<Vec3b>(i, j)[0] = 255; //蓝色通道dst.at<Vec3b>(i, j)[1] = 255; //绿色通道dst.at<Vec3b>(i, j)[2] = 255; //红色通道}imshow("dst", dst);waitKey(0);}
阅读全文
0 0
- 第五天:opencv-访问图像像素
- opencv访问图像像素
- opencv访问图像像素
- Opencv访问图像像素
- OpenCV 2 访问图像像素
- OpenCV 访问图像像素点
- OpenCV:访问图像中的像素
- opencv(8)---访问图像像素
- Opencv并行访问图像像素
- opencv 学习第五天 图像噪音
- OpenCV访问修改图像的像素值
- python OpenCV 图像像素访问 (三)
- OpenCV访问图像像素的方法
- opencv中访问图像像素方式
- 【OpenCV】简单高效地访问图像像素
- 如何使用 opencv 访问图像像素
- opencv技术访问图像中的像素
- 【OpenCV学习笔记】十、访问图像像素
- 如何使用javadoc注释中的标记
- Python yield例子
- HDU 5542 The Battle of Chibi 树状数组+dp+优化
- Destroy the web
- 几种获取高度的方式
- 第五天:opencv-访问图像像素
- QT
- COGS2580:[HZOI 2015]偏序 II (三层CDQ分治+树状数组)
- PKU2186 Popular Cows 受欢迎的牛
- MySQL_002_基础_校对集
- Struts-2.5.10版本遇到的问题
- git--仓库本地操作命令介绍
- hdu 6103 Kirinriki
- days5