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 np

src = 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#为大驼峰,其它基本完全一致

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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

C#winform上位机开发学习笔记11-串口助手接收数据用波形显示功能添加

1.功能描述 接收串口数据&#xff0c;并将收到的十六进制数据用坐标系的方式将数据波形展示出来 2.代码部分 步骤1&#xff1a;定义链表&#xff0c;用于数据保存 //数据结构-线性链表private List<byte> DataList new List<byte>(); 步骤2&#xff1a;定义波…

消息中间件之Kafka(一)

1.简介 高性能的消息中间件&#xff0c;在大数据的业务场景下性能比较好&#xff0c;kafka本身不维护消息位点&#xff0c;而是交由Consumer来维护&#xff0c;消息可以重复消费&#xff0c;并且内部使用了零拷贝技术&#xff0c;性能比较好 Broker持久化消息时采用了MMAP的技…

springboot集成tess4j

spring整合tess4j用于OCR识别图片&#xff0c;在windows环境识别正常&#xff0c;在liunx没有反应&#xff0c;本文用于解决部署linux问题。 整合springboot 1、引入pom文件 <dependency><groupId>net.sourceforge.tess4j</groupId><artifactId>tess…

Sentinel 新版本发布,提升配置灵活性以及可观测配套

作者&#xff1a;屿山 基本介绍 Sentinel 是阿里巴巴集团开源的&#xff0c;面向分布式、多语言异构化服务架构的流量治理组件&#xff0c;承接了阿里巴巴近 15 年的双十一大促流量的核心场景&#xff0c;例如秒杀、冷启动、消息削峰填谷、集群流量控制、实时熔断下游不可用服…

​ElasticSearch

目录 简介 基本概念 倒排索引 FST 简介 ES是一个基于lucene构建的&#xff0c;分布式的&#xff0c;RESTful的开源全文搜索引擎。支持对各种类型的数据的索引&#xff1b;搜索速度快&#xff0c;可以提供实时的搜索服务&#xff1b;便于水平扩展&#xff0c;每秒可以处理 …

【PyTorch】使用PyTorch创建卷积神经网络并在CIFAR-10数据集上进行分类

前言 在深度学习的世界中&#xff0c;图像分类任务是一个经典的问题&#xff0c;它涉及到识别给定图像中的对象类别。CIFAR-10数据集是一个常用的基准数据集&#xff0c;包含了10个类别的60000张32x32彩色图像。在本博客中&#xff0c;我们将探讨如何使用PyTorch框架创建一个简…

app如何实现悬浮框滚动到那个模块定位到那。

如图&#xff1a; 使用uniapp内置方法 onPageScroll 获取到滚动了多少。 其实拿到屏幕滚动多少就很简单了&#xff0c;下面是思路。 tap栏切换效果代码就不贴了。直接贴如何到那个模块定位到哪&#xff0c;和点击定位到当前模块。 <view v-if"show" class&qu…

08-微服务Seata分布式事务使用

一、分布式事务简介 1.1 概念 事务ACID&#xff1a; A&#xff08;Atomic&#xff09;&#xff1a;原子性&#xff0c;构成事务的所有操作&#xff0c;要么都执行完成&#xff0c;要么全部不执行&#xff0c;不可能出现部分成功部分失 败的情况。 C&#xff08;Consistency&…

网络协议与攻击模拟_06攻击模拟SYN Flood

一、SYN Flood原理 在TCP三次握手过程中&#xff0c; 客户端发送一个SYN包给服务器服务端接收到SYN包后&#xff0c;会回复SYNACK包给客户端&#xff0c;然后等待客户端回复ACK包。但此时客户端并不会回复ACK包&#xff0c;所以服务端就只能一直等待直到超时。服务端超时后会…

麒麟系统—— openKylin 安装到虚拟机以及开放SSH通过工具连接

麒麟系统—— openKylin 安装到虚拟机以及开放SSH通过工具连接 1. 在VMware中安装openKylin麒麟系统步骤1&#xff1a;准备VMware环境步骤2&#xff1a;创建新的虚拟机步骤3&#xff1a;安装openKylin麒麟系统步骤4&#xff1a;调整分别率步骤5&#xff1a;安装SSH 2. 使用Open…

Textual Inversion、DreamBooth、LoRA、InstantID:从低成本进化到零成本实现IP专属的AI绘画模型

2023年7月份国内有一款定制写真AI工具爆火。一款名为妙鸭相机的AI写真小程序&#xff0c;成功在C端消费者群体中出圈&#xff0c;并在微信、微博和小红书等平台迅速走红&#xff0c;小红书上的话题Tag获得了330多万的浏览量&#xff0c;相关微信指数飙升到了1800万以上。 其他…

kali安装LAMP和DVWA

LANMP简介 LANMP是指一组通常用来搭建动态网站或者服务器的开源软件&#xff0c;本身都是各自独立的程序&#xff0c;但是因为常被放在一起使用&#xff0c;拥有了越来越高的兼容度&#xff0c;共同组成了一个强大的Web应用程序平台。 L:指Linux&#xff0c;一类Unix计算机操作…

java基础加强(1)

1.xml 1.1概述【理解】 万维网联盟(W3C) 万维网联盟(W3C)创建于1994年&#xff0c;又称W3C理事会。1994年10月在麻省理工学院计算机科学实验室成立。 建立者&#xff1a; Tim Berners-Lee (蒂姆伯纳斯李)。 是Web技术领域最具权威和影响力的国际中立性技术标准机构。 到目前为…

写Shell以交互方式变更Ubuntu的主机名

以下是一个简单的 Bash 脚本&#xff0c;用于以交互方式更改 Ubuntu 20 系统的主机名&#xff1a; 1#!/bin/bash 2 3# 提示用户输入新的主机名 4read -p "请输入新的系统名称&#xff08;主机名&#xff09;: " new_hostname 5 6# 检查是否输入了新的主机名 7if [ -…

猫用空气净化器哪些好?五款宠物空气净化推荐!

如今&#xff0c;养宠物的家庭越来越多了&#xff01;家里因此变得更加温馨&#xff0c;但同时也会带来一些问题&#xff0c;比如异味和空气中的毛发可能会对健康造成困扰。 为了避免家中弥漫着异味&#xff0c;特别是来自宠物便便的味道&#xff0c;一款能够处理家里异味的宠…

python基础学习-03 安装

python3 可应用于多平台包括 Windows、Linux 和 Mac OS X。 Unix (Solaris, Linux, FreeBSD, AIX, HP/UX, SunOS, IRIX, 等等。)Win 9x/NT/2000Macintosh (Intel, PPC, 68K)OS/2DOS (多个DOS版本)PalmOSNokia 移动手机Windows CEAcorn/RISC OSBeOSAmigaVMS/OpenVMSQNXVxWorksP…

npm install运行报错npm ERR! gyp ERR! not ok问题解决

执行npm install的时候报错&#xff1a; npm ERR! path D:..\node_modules\\**node-sass** npm ERR! command failed ...npm ERR! gyp ERR! node -v v20.11.0 npm ERR! gyp ERR! node-gyp -v v3.8.0 npm ERR! gyp ERR! not ok根据报错信息&#xff0c;看出时node-sass运行出现…

图像处理算法:白平衡、除法器、乘法器~笔记

参考&#xff1a; 基于FPGA的自动白平衡算法的实现 白平衡初探 (qq.com) FPGA自动白平衡实现步骤详解-CSDN博客 xilinx 除法ip核&#xff08;divider&#xff09; 不同模式结果和资源对比&#xff08;VHDL&ISE&#xff09;_ise除法器ip核-CSDN博客 数…

绝地求生:本周三停机维护更新4小时: RASH悲喜套装即将下线!

本周三将迎来停机维护更新四小时~&#xff0c;同时游戏商城内RASH悲喜联名套装即将下线&#xff0c;同时空投签到任务和荣都地图翻牌任务即将下线~ 预计维护时间: 2024年1月24日08:00~12:00 本周地图轮换情况 (1月24日 ~ 1月31日) 可自主选择地图的地区:艾伦格、泰戈、帝斯顿、…

前沿重器[41] | 综述-面向大模型的检索增强生成(RAG)

前沿重器 栏目主要给大家分享各种大厂、顶会的论文和分享&#xff0c;从中抽取关键精华的部分和大家分享&#xff0c;和大家一起把握前沿技术。具体介绍&#xff1a;仓颉专项&#xff1a;飞机大炮我都会&#xff0c;利器心法我还有。&#xff08;算起来&#xff0c;专项启动已经…