【c++|opencv】一、基础操作---3.访问图像元素

这篇具有很好参考价值的文章主要介绍了【c++|opencv】一、基础操作---3.访问图像元素。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

every blog every motto: You can do more than you think.
https://blog.csdn.net/weixin_39190382?type=blog

0. 前言

访问图像元素

1. 访问图像像素

1.1 访问某像素

//灰度图像:
image.at<uchar>(j, i) //j为行数,i为列数
//BGR彩色图像
image.at<Vec3b>(j, i)[0] //B分量
image.at<Vec3b>(j, i)[1] //G分量
image.at<Vec3b>(j, i)[2] //R分量

1.2 遍历像素

以添加噪声为例

1.2.1 准备

创建添加噪声函数

Salt.h

#pragma once
#include <iostream>
#include <opencv2/opencv.hpp>
#include <random>

using namespace cv;
using namespace std;

void Salt(Mat img,int n); // n加入噪声点数

Salt.cpp

#include "Salt.h"

void Salt(Mat img,int n){
    // 随机数生成器
    default_random_engine generater;
    uniform_int_distribution<int> randRow(0,img.rows-1);
    uniform_int_distribution<int> randCol(0,img.cols-1);

    int i,j;
    for (int k=0;k<n;k++){
        i=randRow(generater);
        j=randCol(generater);

        if (img.channels() == 1){
            img.at<uchar>(i,j) = 255;
        }
        else if (img.channels() == 3){
            img.at<Vec3b>(i,j)[0] = 255;
            img.at<Vec3b>(i,j)[1] = 255;
            img.at<Vec3b>(i,j)[2] = 255;
        }
    }
}

1.2.2 添加噪声

#include "Salt.h"
#include <iostream>
#include <opencv2/opencv.hpp>


using namespace cv;
using namespace std;


int main(){
    Mat img = imread("/home/v/home.png");
    if (img.empty()){
        cout<<"Could not open or find the image"<<endl;
        return -1;
    }

    imshow("Img",img);

    Salt(img,5000); // 加入噪声点
    imshow("Salt",img);
    waitKey(0);
    return 0;
}

【c++|opencv】一、基础操作---3.访问图像元素,c++|opencv,opencv,c++,人工智能

1.3 指针遍历

1.3.1 以卷积运算为例

#include "Salt.h"
#include <iostream>
#include <opencv2/opencv.hpp>

using namespace cv;
using namespace std;


int main(){
    Mat img = imread("/home/v/home.png");
    if (img.empty()){
        cout<<"Could not open or find the image"<<endl;
        return -1;
    }

    Mat out_img;
    out_img = Mat(img.size(),img.type()); // 定义输出图像大小
    out_img = img.clone(); // clone原图像像素值

    int rows = img.rows; // 原图行数
    int stepx = img.channels(); // 原图通道数
    int cols = (img.cols)*img.channels(); // 矩阵总列数

    for (int row=1;row<rows-1;row++){
        const uchar* previous = img.ptr<uchar>(row-1); // 原图上一行指针
        const uchar* current = img.ptr<uchar>(row); // 原图当前行指针
        const uchar* next = img.ptr<uchar>(row+1); // 原图下一行指针

        uchar* output = out_img.ptr<uchar>(row); // 输出图像当前指针

        for (int col=stepx;col<cols-stepx;col++){ // 对列进行遍历
            // saturate_cast<uchar>(a) 当a小于0,输出0,当a大于255输出255,0-255之间原样输出
            output[col] = saturate_cast<uchar>(5*current[col]-(previous[col]+current[col-stepx] + current[col+stepx] + next[col]));
        }
    }
    imshow("Img",img);
    imshow("Out",out_img);

    waitKey(0);
    return 0;
}

【c++|opencv】一、基础操作---3.访问图像元素,c++|opencv,opencv,c++,人工智能

1.3.2 自带的卷积运算

#include "Salt.h"
#include <iostream>
#include <opencv2/opencv.hpp>


using namespace cv;
using namespace std;


int main(){
    Mat img = imread("/home/v/home.png");
    if (img.empty()){
        cout<<"Could not open or find the image"<<endl;
        return -1;
    }
    Mat out_img;

    Mat kernel = (Mat_<char>(3,3)<<0,-1,0,-1,5,-1,0,-1,0);
    filter2D(img,out_img,img.depth(),kernel); // 卷积

    imshow("Img",img);
    imshow("Out",out_img);
    waitKey(0);
    return 0;
}

【c++|opencv】一、基础操作---3.访问图像元素,c++|opencv,opencv,c++,人工智能文章来源地址https://www.toymoban.com/news/detail-732692.html

到了这里,关于【c++|opencv】一、基础操作---3.访问图像元素的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【C++的OpenCV】第十四课-OpenCV基础强化(三):单通道Mat元素的访问之data和step属性

    🎉🎉🎉 欢迎来到小白 p i a o 的学习空间! color{red}{欢迎来到小白piao的学习空间!} 欢迎来到小白 p ia o 的学习空间! 🎉🎉🎉 💖 C++Python所有的入门技术皆在 我的主页 color{#0cc123}{我的主页} 我的主页 :我的主页         通过之前的学习内容我们知道,Mat中的元素在空间

    2024年02月06日
    浏览(28)
  • OpenCV基本操作——图像的基础操作

    注:opencv图像坐标系中,左上角是原点,y轴向下,x轴向右,单位像素点 有时需要在B,G,R通道图像上单独工作。在这种情况下,需要将BGR图像分割成单个通道。或者在其他情况下,可能需要将这些单独的通道合并到BGR图像 opencv中有150多种颜色空间转换方法。最广泛使用的转

    2024年02月13日
    浏览(45)
  • Opencv 图像处理:图像基础操作与灰度转化

    本文已收录于Opencv系列专栏: 深入浅出OpenCV ,专栏旨在详解Python版本的Opencv,为计算机视觉的开发与研究打下坚实基础。免费订阅,持续更新。 1.图像格式 图像压缩比: 通过编码器压缩后的图象数字大小和原图象数字大小的压缩比。 BMP 格式 Windows系统下的 标准位图格式 ,

    2024年02月04日
    浏览(34)
  • opencv 基础学习08-图像通道操作

    OpenCV的通道拆分功能可用于将多通道图像拆分成单独的通道,这在图像处理和计算机视觉任务中具有许多应用场景。以下是一些通道拆分的常见应用场景: 图像处理 :在某些图像处理任务中,需要对图像的不同通道进行独立处理。例如,可以对彩色图像的RGB通道进行分别处

    2024年02月16日
    浏览(30)
  • OpenCV 图像与视频的基础操作

    在计算机视觉领域,OpenCV是一款广泛使用的开源库,用于图像处理和计算机视觉任务。当你开始使用OpenCV时,了解如何创建和显示窗口,以及加载和保存图片是至关重要的基础知识。本文将介绍如何使用OpenCV进行这些操作,帮助你更好地掌握图像处理和视觉任务的开发技巧。

    2024年02月08日
    浏览(27)
  • 【OpenCV】读入数字图像基础操作学习笔记

    目录 读入数字图像: 窗口中显示图像: 将图像保存到本地: 窗口销毁(打开窗口就要销毁,以免影响后续十月): 等待输入: cv2.imread(所需读入的图像的完整路径(若图像在程序下的文件夹下也可直接输入图像名称),读入图像的形式) 读入图像的形式: cv2.IMREAD_CDLOR(也可写\\\'1\\\'):加载彩色图

    2024年02月12日
    浏览(36)
  • OpenCV基础操作(5)图像平滑、形态学转换、图像梯度

    1、2D卷积 我们可以对 2D 图像实施低通滤波(LPF),高通滤波(HPF)等。 LPF 帮助我们去除噪音,模糊图像。HPF 帮助我们找到图像的边缘。 OpenCV 提供的函数 cv.filter2D() 可以让我们对一幅图像进行卷积操作。 ​ ​ ​ ​ 2、图像模糊 使用低通滤波器可以达到图像模糊的目的。

    2024年02月07日
    浏览(39)
  • 【c++|opencv】一、基础操作---1.图像读取

    every blog every motto: You can do more than you think. https://blog.csdn.net/weixin_39190382?type=blog 有关c++操作opencv记录

    2024年02月06日
    浏览(35)
  • Python-OpenCV 图像的基础操作

    首先读入一副图像: 获取像素值及修改的更好方法: img = cv2.imread(‘./resource/image/1.jpg’, cv2.IMREAD_COLOR) img.shape: 图像的形状(包括行数,列数,通道数的元组) img.size : 图像的像素数目 img.dtype :图像的数据类型 ROI(regionofinterest),感兴趣区域。机器视觉、图像处理中,从被

    2024年02月14日
    浏览(34)
  • C++OpenCV(7):图像形态学基础操作

    🔆 文章首发于我的个人博客:欢迎大佬们来逛逛 🔆 OpenCV项目地址及源代码:点击这里 膨胀与腐蚀是 数学形态学在图像处理中最基础的操作 。 膨胀操作是取 每个位置领域内最大值 ,所以膨胀后输出图像的总体亮度的平均值比起原图会有所升高,图像中比较亮的区域的面

    2024年02月16日
    浏览(39)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包