文章作者:激萌の小宅
促销:¥0
价格:¥0
0 天
有效期
0
总销量
1
累计评价
视频讲解如下:
当前系列所有demo下载地址:
https://github.com/GaoRenBao/OpenCv4-Demo
不同编程语言对应的OpenCv版本以及开发环境信息如下:
语言
OpenCv版本
IDE
C#
OpenCvSharp4.4.8.0.20230708
Visual Studio 2022
C++
OpenCv-4.5.5-vc14_vc15
Python
OpenCv-Python (4.6.0.66)
PyCharm Community Edition 2022.1.3
首先需要准备一张图片a.jpg,如下
下面给大家演示C#、C++、Python这三种环境下是如何打开一张图片。
这三种环境是如何搭建的,在视频的第一讲和第二讲都有讲到,大家可以直接去看视频。当然也可以直接参考下面的文章:
《C# OpenCv环境搭建》
《C++ OpenCv环境搭建》
《Python OpenCv环境搭建》
关于图片读取的一些相关参数:
读取图片
C++函数原型:
CV_EXPORTS_W Mat imread( const String& filename, int flags = IMREAD_COLOR );
C#函数原型:
public static Mat ImRead(string fileName, ImreadModes flags = ImreadModes.Color);
参数说明如下:
filename:图片路径
flags 参数说明如下:
C++参数
C#参数
值
说明
IMREAD_UNCHANGED
Unchanged
-1
返回原始图像。alpha通道不会被忽略,如果有的话。
IMREAD_GRAYSCALE
Grayscale
总是将图像转换为单通道灰度图像(编解码器内部转换)。
IMREAD_COLOR
Color
总是将图像转换为3通道BGR彩色图像。
IMREAD_ANYDEPTH
AnyDepth
2
当输入有相应深度时返回16位/32位图像,否则转换为8位图像。
IMREAD_ANYCOLOR
AnyColor
4
图像将以任何可能的颜色格式读取。
IMREAD_LOAD_GDAL
LoadGdal
8
使用gdal驱动程序加载图像。
IMREAD_REDUCED_GRAYSCALE_2
ReducedGrayscale2
16
始终将图像转换为单通道灰度图像,图像尺寸减小1/2。
IMREAD_REDUCED_COLOR_2
ReducedColor2
17
始终将图像转换为3通道BGR彩色图像,图像大小减小1/2。
IMREAD_REDUCED_GRAYSCALE_4
ReducedGrayscale4
32
始终将图像转换为单通道灰度图像,图像尺寸减小1/4。
IMREAD_REDUCED_COLOR_4
ReducedColor4
33
始终将图像转换为3通道BGR彩色图像,图像大小减小1/4。
IMREAD_REDUCED_GRAYSCALE_8
ReducedGrayscale8
64
始终将图像转换为单通道灰度图像,图像尺寸减小1/8。
IMREAD_REDUCED_COLOR_8
ReducedColor8
65
始终将图像转换为3通道BGR彩色图像,图像大小减小1/8。
IMREAD_IGNORE_ORIENTATION
IgnoreOrientation
128
不要根据EXIF的方向标志旋转图像。
创建窗口
创建窗口函数“namedWindow”.
c++函数原型如下:
CV_EXPORTS_W void namedWindow(const String& winname, int flags = WINDOW_AUTOSIZE);
C#函数原型如下:
public static void NamedWindow(string winName, WindowFlags flags = WindowFlags.GuiExpanded);
C++值
C#值
WINDOW_NORMAL
Normal
0x00000000
用户可以调整窗口的大小(没有限制)/也可以将全屏窗口切换到正常大小。
WINDOW_AUTOSIZE
AutoSize
0x00000001
用户无法调整窗口的大小,大小受所显示图像的限制。
WINDOW_OPENGL
OpenGL
0x00001000
4096
支持opengl的窗口。
WINDOW_FULLSCREEN
FullScreen
将窗口更改为全屏。
WINDOW_FREERATIO
FreeRatio
0x00000100
256
自适应比例(没有比例限制)。
WINDOW_KEEPRATIO
KeepRatio
保持比例
WINDOW_GUI_EXPANDED
GuiExpanded
状态栏和工具栏
WINDOW_GUI_NORMAL
GuiNormal
0x00000010
老旧的方式,窗口不带工具栏和状态栏
C#版本代码如下:
C#版本需要安装“OpenCvSharp4”、“OpenCvSharp4.runtime.win”两个库才行。不然会报错。
如果需要使用“ BitmapConverter.ToBitmap”操作,则需要追加安装“OpenCvSharp4.Extensions”库。
using OpenCvSharp; namespace demo { internal class Program { static void Main(string[] args) { // 读取一张图片 Mat srcImage = new Mat("../../../images/a.jpg"); // 显示图片 Cv2.ImShow("image", srcImage); // 按键检测,结束 Cv2.WaitKey(0); // pictureBox赋值方法 //Bitmap map = BitmapConverter.ToBitmap(srcImage); //PictureBox pictureBox1 = new PictureBox(); //pictureBox1.Image = map; } } }
C++版本代码如下:
#include <iostream> #include <opencv2/core/core.hpp> #include <opencv2/highgui/highgui.hpp> using namespace cv; int main() { // 读取一张图片 Mat srcImage = imread("a.jpg"); // 创建一个名字为image的窗口 namedWindow("image"); // 显示图片 imshow("image", srcImage); // 等待任意按钮结束 waitKey(0); }
Python版本代码如下:
import cv2 #读取一张图片 srcImage=cv2.imread("baboon.jpg") # 创建一个窗口 cv2.namedWindow("image") # 显示图片 cv2.imshow("image", srcImage) # 等待任意输入 cv2.waitKey(0)
Python中使用matplotlib加载图片:
import numpy as np import cv2 from matplotlib import pyplot as plt img = cv2.imread('messi5.jpg', 0) plt.imshow(img, cmap='gray', interpolation='bicubic') # 彩色图像使用 OpenCV 加载时是 BGR 模式。但是 Matplotlib 是 RGB 模式。所以彩色图像如果已经被OpenCV 读取, 它将不会被 Matplotlib 正 确显示。 plt.xticks([]), plt.yticks([]) # to hide tick values on X and Y axis plt.show()
Python中如何判断加载的文件是否存在:
import cv2 import numpy as np import os import errno path = 'messi6.jpg'#不正确的路径,文件不存在 # path = '../data/messi5.jpg' if not os.path.exists(path): raise FileNotFoundError(errno.ENOENT, os.strerror(errno.ENOENT), path) img = cv2.imread(path, cv2.IMREAD_UNCHANGED) cv2.imshow('src', img) cv2.waitKey(0)