图像读取
ImRead() 函数可从文件中读取图像, 并生成一个Mat对象, ImRead() 函数支持绝大多数图像格式.
注意点:
- 读取后生成的Mat对象, 颜色空间为BGR,
- 第二参数为读取方式, 常用的方式有:
. ImreadModes.Color: 彩色方式读取, 即使原图是4通道或者单通道, 生成的 Mat 永远为三通道.
. ImreadModes.AnyColor: 按照自适应的方式读取, 如果是灰度图, 生成的Mat为单通道, 如果是彩色图像, Mat将为三通道.
. ImreadModes.Unchanged : 如果原图带有alpha透明通道, 使用这个方式将同时读取 alpha 通道
. ImreadModes.Grayscale: 按照灰度模式读取, 生成Mat为单通道
图像的展示
ImShow() 函数可以用于展示Mat, 注意点有:
- 仅能正常显示BGR色彩空间的Mat, 如果是其他色彩空间的Mat可以显示,但会失真, 如果要显示其他色彩空间的Mat, 需要首先转回BGR空间
private void showImages()
{
string pngFile = @"D:\my_workspace\opencv\images\draw.png";
var unchangedMode = Cv2.ImRead(pngFile, ImreadModes.Unchanged);
string unchangedModeInfo = $"channels:{unchangedMode.Channels()}, MatType: {unchangedMode.Type()}";
var colorMode = Cv2.ImRead(pngFile, ImreadModes.Color);
string colorModeInfo = $"channels:{colorMode.Channels()}, MatType: {colorMode.Type()}";
var anyColorMode = Cv2.ImRead(pngFile, ImreadModes.Color);
string anyColorModeInfo = $"channels:{anyColorMode.Channels()}, MatType: {anyColorMode.Type()}";
var grayscaleMode = Cv2.ImRead(pngFile, ImreadModes.Grayscale);
string grayscaleModeInfo = $"channels:{grayscaleMode.Channels()}, MatType: {grayscaleMode.Type()}";
Cv2.ImShow("unchangedMode", unchangedMode);
Cv2.ImShow("colorMode", colorMode);
Cv2.ImShow("anyColorMode", anyColorMode);
Cv2.ImShow("grayscaleMode", grayscaleMode);
Cv2.WaitKey();
Cv2.DestroyAllWindows();
}
几种Mat读取方式的通道和数据类型结果:
unchangedModeInfo 输出: "channels:4, MatType: CV_8UC4"
colorModeInfo 输出: "channels:3, MatType: CV_8UC3"
anyColorModeInfo 输出: "channels:3, MatType: CV_8UC3"
grayscaleModeInfo 输出: "channels:1, MatType: CV_8UC1"
图像显示截图: