C++使用opencv读取图片的操作代码(图像处理)

 更新时间:2022年04月24日 11:15:46   作者:努力的袁  
这篇文章主要介绍了C++使用opencv读取图片,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下

代码理解

using namespace cv;

解释:加入此代码,后面就不需要在函数前加入cv:: 如从cv::imread(),可以直接写成imread()

int main(int argc, char** argv)    
{ 
	return 0;
}

解释:

// argc是命令行,总的参数个数; argv[]是argc个参数,其中第0个参数是程序的全名,以后的参数命令行后面跟的用户输入的参数
// char *argv[]  用来取得你所输入的参数
// main(int argc, char **argv)和main(int  argc, char *argv[])一个意思
// int argc是输入在命令行上的参数(字符串)个数;
// *argv[]是指向字符串的指针数组,即数组元素是指向输入在命令行上的每个参数(字符串)的指针。
image = imread("./1.jpg");  

解释:读取图片,其路径为相对路径,图片放在与.cpp相同路径下

imshow("meinv", image);
waitKey(0);

解释: 显示图片,加入waitKey(0)是防止图片出现之后马上自动消失。

for (size_t y = 0; y < image.rows; y++)
{
	return 0;
}

解释:size_t是一种数据相关的无符号类型,它被设计得足够大以便能够存储内存中对象的大小。

unsigned char* row_ptr = image.ptr<unsigned char>(y);

解释:

获取行指针,之所以用char的原因是因为颜色值是1-256用char能放得下
ptr是pointer的缩写,是一个特殊的变量,它里面存储的数值被解释为内存里的一个地址。

全部代码

#include<iostream>
#include<opencv2/core/core.hpp>
#include<opencv2/highgui/highgui.hpp>
using namespace std;
using namespace cv;
int main(int argc, char** argv)    
{                                  
	Mat image;
	image = imread("./1.jpg");
	if (image.data == nullptr)                     //nullptr是c++11新出现的空指针常量
	{
		cout << "图片文件不存在" << endl;
	}
	else
		//显示图片
		imshow("meinv", image);
		waitKey(0);
	// 输出图片的基本信息
	cout << "图像宽为:" << image.cols << "\t高度为:" << image.rows << "\t通道数为:" << image.channels() << endl;
	// 遍历每个像素
	//之所以用y这个名字表示行 是因为图片的坐标系中行号就是y
	for (size_t y = 0; y < image.rows; y++)
		unsigned char* row_ptr = image.ptr<unsigned char>(y);
		for (size_t x = 0; x < image.cols; ++x) {
			//这是获得像素数据数组的头指针,注意像素数据可能会有多个通道所以才需要用数组存储
			unsigned char* data_ptr = &row_ptr[x * image.channels()];
			//对当前像素逐个通道输出颜色值
			for (int i = 0; i < image.channels(); ++i) {
				cout << int(data_ptr[i])<<endl;
			}
		}
	system("pause");
	return 0;
}

读取结果

参考

https://www.w3cschool.cn/opencv/opencv-a4gp2cfi.html

到此这篇关于C++使用opencv读取图片的文章就介绍到这了,更多相关c++ opencv读取图片内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • C语言实现三子棋小游戏全程详解

    C语言实现三子棋小游戏全程详解

    完成一个三子棋的代码并不是很难,有困难且重要的是完成这个游戏代码所具备的思想,因为思想上的进步才是真正的进步,当我们有了这个思想上的武器,写出别的代码,难度就不会高
    2022-05-05
  • MFC创建右键弹出菜单的方法

    MFC创建右键弹出菜单的方法

    这篇文章主要介绍了MFC创建右键弹出菜单的方法,较为详细的分析了创建菜单资源及视类添加WM_RBUTTONDOWN消息的实现方法,是非常实用的技巧,具有一定参考借鉴价值,需要的朋友可以参考下
    2015-01-01
  • C/C++举例讲解关键字的用法

    C/C++举例讲解关键字的用法

    相对于其他语言来说,C语言的关键字算是少的了。在C98中关键子总共只有32个,我们来分析一下部分关键字在C/C++中它独特的作用
    2022-05-05
  • C语言代码 模块化实现三子棋

    C语言代码 模块化实现三子棋

    这篇文章主要为大家详细介绍了C语言 模块化实现三子棋程序,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-11-11
  • C++关于引用(reference)的代码案例

    C++关于引用(reference)的代码案例

    引用是C++中的一种重要特性,它可以让代码更加高效、简洁和易读,本文将深入探讨引用的相关知识,包括引用的概念、使用方法、优点和注意事项等。建议根据给出的代码案例练一下,熟悉即可
    2023-05-05
  • 最短时间学会基于C++实现DFS深度优先搜索

    最短时间学会基于C++实现DFS深度优先搜索

    常见使用深度优先搜索(DFS)以及广度优先搜索(BFS)这两种搜索,今天我们就来讲讲什么是深度优先搜索,感兴趣的可以了解一下
    2021-08-08
  • C语言 分析逆序字符串与字符串的逆序输出有什么区别

    C语言 分析逆序字符串与字符串的逆序输出有什么区别

    例如,给定一个字符串 s,将 s 中的字符顺序颠倒过来,如 s = “abcd”,逆序后变成 “dcba”。可以采用多种方法对字符串进行逆序,以下将对其中的方法和字符串的逆序输出的区别进行分析
    2022-04-04
  • C语言 解决不用+、-、×、÷数字运算符做加法的实现方法

    C语言 解决不用+、-、×、÷数字运算符做加法的实现方法

    本篇文章是对在C语言中解决不用+、-、×、÷数字运算符做加法的方法进行了详细的分析介绍,需要的朋友参考下
    2013-05-05
  • C++实现简单的通讯录管理系统

    C++实现简单的通讯录管理系统

    这篇文章主要为大家详细介绍了C++实现简单的通讯录管理系统,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-06-06
  • VS2019中CMake项目的简单使用方法

    VS2019中CMake项目的简单使用方法

    这篇文章主要介绍了VS2019中CMake项目的简单使用方法,需要的朋友可以参考下
    2020-02-02

最新评论