C++PythonC# 三语言OpenCV从零开发(3):图像读取和显示

文章目录

  • 相关链接
  • 前言
  • Mat是什么
  • 读取图片
    • C++
    • C#
    • Python
  • 灰度处理
    • C++
    • CSharp
    • Python
  • 打印图像信息
    • C++
    • Csharp
    • Python
  • 总结

相关链接

C++&Python&Csharp in OpenCV 专栏

【2022B站最好的OpenCV课程推荐】OpenCV从入门到实战 全套课程(附带课程课件资料+课件笔记)

OpenCV4 C++ 快速入门视频30讲 - 系列合集

OpenCV4 C++ 课程笔记

前言

在上一章纠结过教程的选择之后,还是觉得老老实实从零开始学OpenCV,从OpenCV C++视频教程开始。

这里确保你已经拥有了三语言环境。而且用于CSharp的代码和C++的代码差不多,所以我会按照C++,CSharp,Python的顺序写代码

C++&Python&C# 三语言OpenCV从零开发(1):环境配置

Mat是什么

Mat - 基本图像容器

OpenCV2:Mat属性type,depth,step

Mat是图像的基本容器,将图像信息转化为数字信息,MAT本质上是一个矩阵。

图像
三原色
红色通道
....
绿色通道
...
蓝色通道
黑白图像
像素点
0-255代表亮度

读取图片

我们试试读取图片
在这里插入图片描述

C++

#include <opencv2/opencv.hpp>  
#include <opencv2/core/core.hpp>  
#include <opencv2/highgui/highgui.hpp>  
#include <opencv2/imgproc.hpp>  
#include<iostream>  
using namespace std;
using namespace cv;
int main()
{//注意,文件的路径必须是反斜杠/Mat src = imread("D:/workSpace/OpenCV/HellOpenCV/Resources/OpenCV.png");//显示图片imshow("C++ Png", src);waitKey(0);destroyAllWindows();return 0;
}

在这里插入图片描述

C#

在这里插入图片描述

 internal class Program{static void Main(string[] args){Mat src = Cv2.ImRead("D:/workSpace/OpenCV/HellOpenCV/Resources/OpenCV.png");//显示图片Cv2.ImShow("CSharp", src);Cv2.WaitKey(0);Cv2.DestroyAllWindows();}}

在这里插入图片描述

Python

Python和C++最大的区别就是少了一个变量的命名

在这里插入图片描述

import cv2
# python中需要np来辅助
import numpy as npsrc = cv2.imread("D:/workSpace/OpenCV/HellOpenCV/Resources/OpenCV.png")
cv2.imshow("Python",src)cv2.waitKey(0)
cv2.destroyAllWindows()

在这里插入图片描述

灰度处理

OpenCV 提供了读取灰度图像的接口

  • CV2.IMREAD_COLOR:彩色图像
  • CV2.IMREAD_GRAYSCALE:灰度图像
    在这里插入图片描述

C++

#include <opencv2/opencv.hpp>  
#include <opencv2/core/core.hpp>  
#include <opencv2/highgui/highgui.hpp>  
#include <opencv2/imgproc.hpp>  
#include<iostream>  
using namespace std;
using namespace cv;
int main()
{//注意,文件的路径必须是反斜杠///IMREAD_GRAYSCALE灰度读取Mat src = imread("D:/workSpace/OpenCV/HellOpenCV/Resources/OpenCV.png",IMREAD_GRAYSCALE);//显示图片imshow("C++", src);waitKey(0);destroyAllWindows();return 0;
}

在这里插入图片描述

CSharp

using OpenCvSharp;namespace HelloOpenCV
{internal class Program{static void Main(string[] args){// 由于C# 有枚举类型,命名更加舒服Mat src = Cv2.ImRead("D:/workSpace/OpenCV/HellOpenCV/Resources/OpenCV.png",ImreadModes.Grayscale);//显示图片Cv2.ImShow("CSharp", src);Cv2.WaitKey(0);Cv2.DestroyAllWindows();}}
}

在这里插入图片描述

Python

import cv2
# python中需要np来辅助
import numpy as np# IMREAD_GRAYSCALE,灰度读取
src = cv2.imread("D:/workSpace/OpenCV/HellOpenCV/Resources/OpenCV.png",cv2.IMREAD_GRAYSCALE)
cv2.imshow("Python",src)cv2.waitKey(0)
cv2.destroyAllWindows()

在这里插入图片描述

打印图像信息

C++

#include <opencv2/opencv.hpp>  
#include <opencv2/core/core.hpp>  
#include <opencv2/highgui/highgui.hpp>  
#include <opencv2/imgproc.hpp>  
#include<iostream>  
using namespace std;
using namespace cv;
int main()
{//注意,文件的路径必须是反斜杠///IMREAD_GRAYSCALE灰度读取Mat src = imread("D:/workSpace/OpenCV/HellOpenCV/Resources/OpenCV.png",IMREAD_GRAYSCALE);//显示图片imshow("C++", src);cout << endl;//打印图像信息cout << "图像的行数为: " << src.rows << endl;  //获取图像的高度,行数;cout << "图像的列数为: " << src.cols << endl;  //获取图像的宽度,列数;cout << "图像的通道数为: " << src.channels() << endl;  //获取图像的通道数,彩色图=3,灰度图=1;cout << "图像的尺寸为: " << src.size << endl;  //获取图像的尺寸,行*列;waitKey(0);destroyAllWindows();return 0;
}

在这里插入图片描述

Csharp

一般来说,只要C++跑通了,C# 的代码大差不差

using OpenCvSharp;namespace HelloOpenCV
{internal class Program{static void Main(string[] args){// 由于C# 有枚举类型,命名更加舒服Mat src = Cv2.ImRead("D:/workSpace/OpenCV/HellOpenCV/Resources/OpenCV.png",ImreadModes.Grayscale);Console.WriteLine($"图像的行数为:{src.Rows}");Console.WriteLine($"图像的列数为:{src.Cols}");Console.WriteLine($"图像的通道数为:{src.Channels()}");Console.WriteLine($"图像的尺寸为:{src.Size()}");//显示图片Cv2.ImShow("CSharp", src);Cv2.WaitKey(0);Cv2.DestroyAllWindows();}}
}

在这里插入图片描述

Python

import cv2
# python中需要np来辅助
import numpy as np# IMREAD_GRAYSCALE,灰度读取
src = cv2.imread("D:/workSpace/OpenCV/HellOpenCV/Resources/OpenCV.png",cv2.IMREAD_GRAYSCALE)# 打印图片信息
# Python将其信息统一放在了shape里面,如果是单通道,通道个数直接没有
print('行,列,通道',src.shape)
print('type:',src.dtype)# print(str.shape)
cv2.imshow("Python",src)cv2.waitKey(0)
cv2.destroyAllWindows()

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

总结

如果说C++ 版本是原版的话。那么

  • C++和Python:Python少了变量的声明,算子基本一致
  • C++和C#:除非命名方式,C#为大驼峰,其它基本完全一致

我感觉我的学习的路子应该是对的,毕竟是新手,三个语言的基础的算子还是都要了解一下的。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/417519.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

python使用jupyter记笔记

目录 一、安装 二、运行jupyter 三、使用 四、记笔记 Jupyter Notebook&#xff08;此前被称为 IPython notebook&#xff09;是一个交互式笔记本&#xff0c;支持运行 40 多种编程语言。 Jupyter Notebook 的本质是一个 Web 应用程序&#xff0c;便于创建和共享程序文档&a…

debian12.4配置

文章目录 debian12.4配置概述笔记将非root用户添加到sudo组更换国内源配置ssh的客户端访问END debian12.4配置 概述 在虚拟机中装了一个debian12.4, 想配置ssh客户端连接, 出了问题. 配置乱了, 还好长了个心眼, 做了快照. 发现2个问题: debian12.4默认安装完, 有ssh, 先检查…

uni-app的学习【第三节】

五 运行环境判断与跨端兼容 uniapp为开发者提供了一系列基础组件,类似HTML里的基础标签元素,但uni-app的组件与HTML不同,而是与小程序相同,更适合手机端使用。 虽然不推荐使用 HTML 标签,但实际上如果开发者写了`div`等标签,在编译到非H5平台时也会被编译器转换为 `view`…

鸿蒙原生应用/元服务开发-延迟任务说明(一)

一、功能介绍 应用退至后台后&#xff0c;需要执行实时性要求不高的任务&#xff0c;例如有网络时不定期主动获取邮件等&#xff0c;可以使用延迟任务。当应用满足设定条件&#xff08;包括网络类型、充电类型、存储状态、电池状态、定时状态等&#xff09;时&#xff0c;将任务…

/var/run/yum.pid 已被锁定,PID 为 2762 的另一个程序正在运行解决方法

一、问题 /var/run/yum.pid 已被锁定&#xff0c;PID 为 2762 的另一个程序正在运行 二、原因 这个提示意味着在你的Linux系统中&#xff0c;有一个yum&#xff08;或者dnf&#xff0c;在较新版本的Fedora和RHEL/CentOS 8中&#xff09;进程正在运行&#xff0c;并且它已经创建…

使用JFLASH实现文件程序自动化合并及下载功能

主要总结下使用 SEGGER 工具集的 JFLASH 软件实现hex/bin文件合并以及程序的自动下载使用方法。 起因是最近使用到LVGL字库文件的制作&#xff0c;每次都要将分散的bin文件按既定分配的偏移作合并处理&#xff0c;刚开始使用的是二进制文件合并工具,文件少的时候还行&#xff…

AI短视频制作:创意与技术的完美结合

文章目录 一、充分了解AI技术的应用范围和优势二、创意策划&#xff0c;确定作品主题和风格三、素材收集&#xff0c;丰富作品内容四、特效制作&#xff0c;提升作品视觉效果五、配音处理&#xff0c;增强作品表现力六、作品发布&#xff0c;扩大作品传播范围《AI短视频制作一本…

Mybatis集成MySQL使用游标查询处理大批量数据

背景 基于数据的时间范围查询&#xff0c;给符合条件的用户推送积分即将到期的提醒。 初期用户量小使用最普通简单的分页查询扫描数据处理数据没问题。随着用户量的上升表数据已经上千万&#xff0c;每天扫描处理的数量也超百万&#xff0c;limit分页出现了慢sql&#xff0c;…

MacBookPro怎么数据恢复? mac电脑数据恢复?

使用电脑的用户都知道&#xff0c;被删除的文件一般都会经过回收站&#xff0c;想要恢复它直接点击“还原”就可以恢复到原始位置。mac电脑同理也是这样&#xff0c;但是“回收站”在mac电脑显示为“废纸篓”。 如果电脑回收站&#xff0c;或者是废纸篓里面的数据被清空了&…

MySQL第四次作业

目录 1、实验需求一&#xff1a; 2、实验步骤一&#xff1a; &#xff08;1&#xff09;用SQL语句创建学生表student&#xff0c;定义主键&#xff0c;姓名不能重名&#xff0c;性别只能输入男或女&#xff0c;所在系的默认值是 “计算机”。 &#xff08;2&#xff09;修改s…

第二次作业+第三次作业

第二次作业第三次作业 第二次作业 题目&#xff1a; 网站需求&#xff1a; ​ 1.基于域名[www.openlab.com](http://www.openlab.com)可以访问网站内容为 welcome to openlab!!! 2.给该公司创建三个子界面分别显示学生信息&#xff0c;教学资料和缴费网站&#xff0c;基于[ww…

中仕教育:考上选调生之后能不去吗?选调生和公务员哪个比较好?

选调生&#xff0c;是指经过选拔、培训、考核等一系列程序&#xff0c;选拔出的人才。选调生通常需要在基层锻炼一段时间&#xff0c;然后根据工作表现和能力得到提拔。 考上选调生之后能否不去&#xff0c;有以下两种情况。 1.如果通过选调笔试&#xff0c;但是并未参加后续…