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图像操作:读取,裁剪,保存,缩放,遍历和读取文件夹图片

opencv.cpp文件

#include <iostream>
#include "opencv.hpp"
#include "opencv_test.h"
using namespace cv;
using namespace std;

int main()
{

    

    Mat srcImage = imread("result.jpg");     //定义并且载入图像
//  Mat imread(const string& filename,flags = 1)
//  filename:载入图片的路径,支持载入的图片的格式:bmp,dib,jpeg,jpg,jpe,jp2,png,pbm,pgm,ppm,sr,ras,tiff,tif
//  flags:  
//      flags>0 返回一个3通道的彩色图像;
//      flags=0 返回灰色图像;
//      flags<0 返回包含Alpha通道的图像

    if (srcImage.data == nullptr)//nullptr是c++11新出现的空指针常量
    {
        cerr << "图片文件不存在" << endl;
        return 0;
    }

    namedWindow("原图", WINDOW_NORMAL);   //创建窗口,创建窗口的效果就是图片在窗口中显示能够拖动改变大小
//  void namedWindow(cosnt string& winname, int flags = WINDOW_AUTOSIZE)
//  winname:创建窗口的名称
//  flags:
//  WINDOW_NORMAL:用户可以缩放窗口
//  WINDOW_AUTOSIZE:窗口适应图像
//  WINDOW_OPENGL:窗口创建之初opengl
    imshow("原图", srcImage);         //显示原图
//  void imshow(const string& winname, InputArray mat)
//  winname:窗口名称
//  mat:需要显示的图像
    imwrite("output.jpg", srcImage);    //写入文件
//  bool imwrite( const String& filename, InputArray img, const std::vector<int>& params = std::vector<int>())
//  filename:输出的文件名
//  img:用于输出的Mat数据
//  params:特定格式保存的参数编码,一般不需要填写

    Mat image_mini;//定义缩小图
    namedWindow("缩小图", WINDOW_NORMAL);   //创建窗口
    resize(srcImage,  image_mini, cv::Size(srcImage.cols / 10, srcImage.rows/10));//缩小操作
    imshow("缩小图", image_mini);         //显示缩小图片


    Rect m_select;//定义矩形区域
    namedWindow("剪裁图", WINDOW_NORMAL);   //创建窗口
    m_select = Rect(0, 0, srcImage.rows / 10, srcImage.cols / 10);//选择图片区间
    Mat ROI = srcImage(m_select);//设置感兴趣区域
    imshow("剪裁图", ROI);//显示感兴趣区域


     遍历每个像素
    之所以用y这个名字表示行是因为图片的坐标系中行号就是y
    //for (size_t y = 0; y < srcImage.rows/100; ++y) {

    //    // 获取行指针,之所以用char的原因是因为颜色值是1-256用char能放得下
    //    // ptr是pointer的缩写
    //    unsigned char* row_ptr = srcImage.ptr<unsigned char>(y);
    //    for (size_t x = 0; x < srcImage.cols/100; ++x) {
    //        //这是获得像素数据数组的头指针,注意像素数据可能会有多个通道所以才需要用数组存储
    //        unsigned char* data_ptr = &row_ptr[x * srcImage.channels()];
    //        //对当前像素逐个通道输出颜色值
    //        for (int i = 0; i < srcImage.channels(); ++i) {
    //            cout << int(data_ptr[i])<< endl;
    //        }
    //        //对像素除以二的操作
    //        for (int i = 0; i < srcImage.channels(); ++i) {
    //            data_ptr[i]/=2;
    //        }
    //        //输出一个空格
    //        cout << endl;
    //        //再次输出像素值
    //        for (int i = 0; i < srcImage.channels(); ++i) {
    //            cout << int(data_ptr[i]) << endl;
    //        }
    //    }
    //}

    cv::String pattern ="C:/Users/86178/Desktop/6mm-light-on-dark/img/*.png"  ;//多幅图片路径
    Read read;//定义一个read类
    vector<Mat> img = read.ReadImage(pattern);//读取路径中的图片
    


    int c = waitKey(2000);//等待时间2秒内无任何操作时等待结束后返回-1
//  int waitKey(int delay = 0)
//  delay:等待delay秒关闭窗口
    cout << " c = " << c << endl;//输出c = -1
    

    waitKey(); //注意这里是要鼠标当前焦点在图片窗口时才能响应按钮按下,如果不按下就一直等待
    destroyWindow("剪裁图");//按下第一次关闭剪切图


    waitKey();        //按下第二次关闭所有窗口
    destroyAllWindows();//关闭所有窗口

    waitKey();//第三次按下全部结束
    return 0;
}


vector<Mat> Read::ReadImage(cv::String pattern)
{
    vector<cv::String> fn;
    glob(pattern, fn, false);
   
    
    /*  绝对路径下的照片
        pattern = "/home/Data/data/*.jpg" : 选择 * .jpg这一类的图片
        std::vector< cv::String > &result : 这里必须为CV的String,即路径被存在string类型的vector中
        bool recursive : 可省去, 当recursive为false时,仅仅遍历指定文件夹内符合模式的文件;
        当recursive为true时,会同时遍历指定文件夹的子文件夹
       */
    vector<Mat> images;
    size_t count = fn.size(); //number of png files in images folder
    for (size_t i = 0; i < count; i++)
    {
        images.emplace_back(cv::imread(fn[i]));
        imshow("img", imread(fn[i]));
        waitKey(0);
    }
    return images;

}
***opencv.h文件***
```c
#pragma once
#include <opencv2/opencv.hpp>

using namespace cv;
using namespace std;

class Read {
public:
    vector<Mat> ReadImage(cv::String pattern);
};

  人工智能 最新文章
2022吴恩达机器学习课程——第二课(神经网
第十五章 规则学习
FixMatch: Simplifying Semi-Supervised Le
数据挖掘Java——Kmeans算法的实现
大脑皮层的分割方法
【翻译】GPT-3是如何工作的
论文笔记:TEACHTEXT: CrossModal Generaliz
python从零学(六)
详解Python 3.x 导入(import)
【答读者问27】backtrader不支持最新版本的
上一篇文章      下一篇文章      查看所有文章
加:2021-08-29 09:05:19  更:2021-08-29 09:08:34 
 
开发: 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/1 12:39:17-

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