opencv 操作像素

本文详细介绍如何使用OpenCV库进行像素级图像处理,通过具体示例讲解如何在图像中添加椒盐噪声,包括理解图像矩阵、像素访问及修改方法。适用于初学者掌握OpenCV基本操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

今天开始学习opencv操作,配合4412开发板的双目摄像头进行学习。

图像本质上就是一个由数值组成的矩阵,对于灰度图像(黑白图像),像素是八位无符号数,0表示黑色,255表示白色,对于彩色图像需要用三原色数据来重现不同可见色。在数字成像技术中,常用的主颜色通道是红色、绿色、蓝色,因此每3个8位数值组成矩阵的一个元素。

1.1访问像素值

要访问矩阵中的每个独立元素,只需要指定它的行号和列号,返回对应的元素可以是单个数值,也可以是多通道数值向量。

1.2实现

为了说明直接访问像素值,我们创建一个专门的函数,用他在图像中加入椒盐噪声

创建函数如下:

void salt(Mat image,int n)
{
    int i,j;
    for(int k=0;k<n;k++){
        i=std::rand()%image.cols;
        j=std::rand()%image.rows;
        if(image.type()==CV_8UC1){
            image.at<uchar>(j,i)=255;
        }
        else if(image.type()==CV_8UC3){
            image.at<Vec3b>(j,i)[0]=255;
            image.at<Vec3b>(j,i)[1]=255;
            image.at<Vec3b>(j,i)[2]=255;
        }
    }
}

这个函数使用一个循环,执行n次,每次把随机选择的像素值设置成,这里使用了随机数生成像素的行和列,用type方法来区别灰度图像和彩色图像,对灰度图像来说,只用简单8位数值为255,对于彩色图像,要把三个通道的设置成255,才能产生白色像素。

全部代码如下:

#include <opencv2/opencv.hpp>
#include <iostream>
using namespace std;
using namespace cv;
void salt(Mat image,int n);
int main(int argv,char** argc)
{
    Mat src;
    src=imread("D:/test/1.jpg");
    salt(src,3000);
    imshow("input",src);

    waitKey(0);
    return 0;
}

void salt(Mat image,int n)
{
    int i,j;
    for(int k=0;k<n;k++){
        i=std::rand()%image.cols;
        j=std::rand()%image.rows;
        if(image.type()==CV_8UC1){
            image.at<uchar>(j,i)=255;
        }
        else if(image.type()==CV_8UC3){
            image.at<Vec3b>(j,i)[0]=255;
            image.at<Vec3b>(j,i)[1]=255;
            image.at<Vec3b>(j,i)[2]=255;
        }
    }
}

执行结果如下:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值