数字图像处理与OpenCV(3-1)--存取像素
2017-07-22 20:58
197 查看
为了存取矩阵元素,需要在代码中指定元素所在的行和列,程序会返回相应的元素。如果图像是单通道,返回值是单个数值;如果图像是多通道的,返回值则是一组向量(vector)。
我们通过一个简单的函数直接存取像素值,该函数会在图像中加入椒盐噪点。椒盐噪点是一种特殊噪点,它随机的将部分像素设置为白色或黑色。在传输过程中如果部分像素值丢失,该种噪点就会出现。在我们的例子中随机挑选若干像素,并设为白色。
先创建一个函数,它的第一个参数是一个输入图像,该函数会修改此图像。未达到这个目的,需要用传应用的参数传递方式。这个函数的第二个函数是替换像素的个数:
注意:成员函数at(int y,int x)用来存取图像元素,但必须在编译器知道图像的数据类型,因为at方法本身不会对数据类型进行转换。
完整代码如下:
我们通过一个简单的函数直接存取像素值,该函数会在图像中加入椒盐噪点。椒盐噪点是一种特殊噪点,它随机的将部分像素设置为白色或黑色。在传输过程中如果部分像素值丢失,该种噪点就会出现。在我们的例子中随机挑选若干像素,并设为白色。
先创建一个函数,它的第一个参数是一个输入图像,该函数会修改此图像。未达到这个目的,需要用传应用的参数传递方式。这个函数的第二个函数是替换像素的个数:
void salt(Mat &image, int n) { for (int k = 0; k < n; k++) { int i = rand() % image.cols; int j = rand() % image.rows; if (image.channels() == 1) { image.at<uchar>(j, i) = 255; } else if (image.channels() == 3) { image.at<Vec3b>(j, i)[0] = 255; //等价于image.at<Vec<uchar,3> >(j,i)[0] = 255; image.at<Vec3b>(j, i)[1] = 255; image.at<Vec3b>(j, i)[2] = 255; } } }这个函数通过检查图像的通道数来区分灰度图像和彩色图像。对于灰色图像直接将像素值设为255;对于彩色图像,我们需要每个通道的值都设为255。
注意:成员函数at(int y,int x)用来存取图像元素,但必须在编译器知道图像的数据类型,因为at方法本身不会对数据类型进行转换。
完整代码如下:
#include <opencv2/opencv.hpp> using namespace cv; //使用OpenCV命名空间 void salt(Mat &image, int n) { for (int k = 0; k < n; k++) { int i = rand() % image.cols; int j = rand() % image.rows; if (image.channels() == 1) { image.at<uchar>(j, i) = 255; } else if (image.channels() == 3) { image.at<Vec3b>(j, i)[0] = 255; image.at<Vec3b>(j, i)[1] = 255; image.at<Vec3b>(j, i)[2] = 255; } } } int main() { //图像加载 Mat src1 = imread("1.jpg"); //默认加载,按照IMREAD_COLOR(RGB图像方式) Mat src2 = imread("1.jpg"); namedWindow("input img Init", CV_WINDOW_AUTOSIZE); imshow("input img Init", src1); salt(src2, 3000); namedWindow("input img Mod", CV_WINDOW_AUTOSIZE); imshow("input img Mod", src2); waitKey(0); return 0; }
相关文章推荐
- 【OpenCV数字图像处理】(5) 【Python编程】(5) 像素访问之添加椒盐实例 通道分离与合并
- opencv数字图像基础,提取图像像素,遍历图像
- Python-OpenCV 处理图像(三):图像像素点操作
- opencv 数字图像处理-图像缩放 自己写cvResize()函数
- C#数字图像处理有3种典型方法:提取像素法、内存法、指针法。
- opencv关于存取图像像素操作的汇总
- OpenCV 数组存储图片像素值,便于后期图像处理
- Opencv (Opencv2)结合MFC学习数字图像处理---显示图片
- 【数字图像处理】OpenCV最大化HSV图像的"S"和"V"部分
- Python-OpenCV 处理图像(二)(三):滤镜和图像运算 图像像素点操作
- 我的OpenCV学习笔记(三):利用操作像素完成简单的图像处理:加入椒盐噪声、图像翻转、改变对比度、图像锐化
- 数字图像处理之配置opencv中遇到的问题
- Opencv (Opencv2)结合MFC学习数字图像处理【1】---建立工程
- Opencv (Opencv2)结合MFC学习数字图像处理---图片解码(2)
- Opencv (Opencv2)结合MFC学习数字图像处理【2】---图片解码
- 数字图像处理成长之路16:opencv用于android的几种方法
- C#数字图像处理的3种方法::提取像素法、内存法和指针法
- 轻松理解-opencv-数字图像图像处理--一维离散卷积和一维离散傅里叶变换
- Opencv (Opencv2)结合MFC学习数字图像处理【3】---显示图片
- 【OpenCV】OpenCV中获取图像的像素点并处理