IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 人工智能 -> opencv 读取显示图像 访问像素 -> 正文阅读

[人工智能]opencv 读取显示图像 访问像素

#include<opencv.hpp>
#include <iostream>
using namespace cv;
int main()
{   
    //新建一个100 * 100 的图像,CV_8UC3:类型为8位无符号,通道数为3,分别是蓝绿红通道,
    //颜色bgr为255,0,0,蓝通道0xff(8位图像最大位0xFF) ,绿红为0
    cv::Mat blue = cv::Mat(100, 100, CV_8UC3, cv::Scalar(255, 0, 0));
    //新建一个窗口,标题为title
    cv::namedWindow("title", cv::WINDOW_KEEPRATIO);
    //往标题为title的窗口中填充图像,若无此窗口,则自动创建
    cv::imshow("title", blue);

    //读文件 注意反斜杠方向
    cv::Mat src = imread("C:/Users/FeboReigns/Desktop/CachedImage_1024_768_POS4.jpg");
   //打印基本信息 大小 通道数 类型,注意类型是宏定义,要去查数字对应是哪个类型
   // 这是宏定义 我复制过来了一部分
//#define CV_8U   0
//#define CV_8S   1
//#define CV_16U  2
//#define CV_16S  3
//#define CV_32S  4
//#define CV_32F  5
//#define CV_64F  6
//#define CV_16F  7
    std::cout << "\n" << "size:" << src.size() << " channels:" << src.channels()
        << " type:" << src.type()
        << "\n";

    //初始化一个矩阵,大小为blue的列数和行数,CV_8UC1 类型为8位无符号,通道数为3
    //zeros 所有数据填充位0,除此之外还有ones,所有数据填充为1
    Mat gray = Mat::zeros(Size(blue.cols, blue.rows), CV_8UC1);
    //转换色彩空间将src 转为灰度图,
    cvtColor(src, gray, COLOR_BGR2GRAY);

    cv::namedWindow("gray", cv::WINDOW_KEEPRATIO);
    cv::imshow("gray", gray);
    //获取图像的宽高
    int cols = gray.cols;
    int rows = gray.rows;

    Mat white = Mat::zeros(Size(cols, rows), CV_8UC1);

    for (int i = 0; i < rows; i++) {
       //第i行的首地址,即第i行的第一个像素 
        uchar * row_gray = gray.ptr(i);

        uchar* row_white = white.ptr(i);

        for (int j = 0; j < cols; j++) {
            //第j列,即第i行的第j个像素
            //+10 对黑白图来说,亮度会增加
            if(row_gray[j] + 10<=255)
                row_white[j] = row_gray[j]+10;
        }
    }
    cv::namedWindow("white", cv::WINDOW_KEEPRATIO);
    cv::imshow("white", white);
    Mat white_fide;
    //归一化到 0 到 1 图像内容变为为零点几,类型也变为了CV_32FC1,单通道32位float
    normalize(white, white, 0, 1, NORM_MINMAX,CV_32FC1);

    //white_fide = white* 0.8 + 0*0 + 0.02
    addWeighted(white, 0.8, Mat::zeros(Size(cols, rows), CV_32FC1), 0, 0.02,white_fide);
    cv::namedWindow("white_fide", cv::WINDOW_KEEPRATIO);
    cv::imshow("white_fide", white_fide);
    
    
    auto start = clock(); //记录此时时钟
        //拷贝一份内存给out
        Mat out = white_fide.clone();
    auto end = clock();//记录此时时钟
    auto time = end - start;//时钟差即为 消耗的时间 毫秒
    //注意 Debug的速度要比Relase 慢很多
    std::cout << time<<std::endl;
    //图像保存
    imwrite("out.jpg", out);


    //每隔多少毫秒,等待按键按下,阻塞程序不能往下执行,当参数为0 则一直等待,一直阻塞
    //若不阻塞则程序退出,imshow的图像一瞬即逝
    cv::waitKey(0);
    
}

?time 为2

注意

我上面写的是单通道的访问像素点

若为多通道则应这样写

//读文件 注意反斜杠方向
    cv::Mat src = imread("C:/Users/FeboReigns/Desktop/CachedImage_1024_768_POS4.jpg");
    cv::namedWindow("src", cv::WINDOW_KEEPRATIO);
    cv::imshow("src", src);

    for (int i = 0; i < src.rows; i++) {
        //第i行的首地址,即第i行的第一个像素 
        uchar* row_src = src.ptr(i);

        for (int j = 0; j < src.cols*3; j+=3) {
            //第j列,即第i行的第j个像素
            //对于三通道来说,j列有三个值,分别为B 分量 G分量 R分量
            //我这里对每个分量加不同的值 蓝绿减弱,红色增强

            if (row_src[j+0] - 20 >= 0)
                row_src[j + 0] = row_src[j + 0] - 20;

            if (row_src[j + 1] - 20 >= 0)
                row_src[j + 1] = row_src[j + 1] - 20;
            
            if (row_src[j + 2] + 30 <= 255)
                row_src[j + 2] = row_src[j + 2] + 30;
        }
    }
    cv::namedWindow("src_1", cv::WINDOW_KEEPRATIO);
    cv::imshow("src_1", src);

?

?opencv VS 环境搭建 读取显示图像 访问像素_FeboReigns的博客-CSDN博客C++图像处理入门 平面图 交织图 存储方式_FeboReigns的博客-CSDN博客

  人工智能 最新文章
2022吴恩达机器学习课程——第二课(神经网
第十五章 规则学习
FixMatch: Simplifying Semi-Supervised Le
数据挖掘Java——Kmeans算法的实现
大脑皮层的分割方法
【翻译】GPT-3是如何工作的
论文笔记:TEACHTEXT: CrossModal Generaliz
python从零学(六)
详解Python 3.x 导入(import)
【答读者问27】backtrader不支持最新版本的
上一篇文章      下一篇文章      查看所有文章
加:2022-03-06 13:02:47  更:2022-03-06 13:04:04 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/26 17:28:23-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码