Skip to content

Commit 7e3844a

Browse files
committed
feat: add support for visualization of float and double channel types, add support for two channels mats
1 parent 4aec090 commit 7e3844a

3 files changed

Lines changed: 67 additions & 11 deletions

File tree

Directory.Build.props

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@
1313
<ManagePackageVersionsCentrally>true</ManagePackageVersionsCentrally>
1414
</PropertyGroup>
1515
<PropertyGroup>
16-
<Version>0.99.0-preview.1</Version>
16+
<Version>0.99.1-preview.2</Version>
1717
<Company>David Makovský</Company>
1818
<Copyright>Copyright © 2024-$([System.DateTime]::Now.ToString(yyyy)) David Makovský</Copyright>
1919
<Authors>David Makovský</Authors>

OpenCvSharpVisualizer.DebuggeeSide/OpenCvSharpVisualizerSource.cs

Lines changed: 66 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -10,25 +10,84 @@ public override void GetData(object target, Stream outgoingData)
1010
switch (target)
1111
{
1212
case Mat mat:
13-
SerializeAsJson(outgoingData, CreateDataSource(mat, mat.ToString()));
13+
SerializeAsJson(outgoingData, CreateDataSource(mat));
1414
break;
1515
case UMat umat:
16-
SerializeAsJson(outgoingData, CreateDataSource(umat, umat.ToString()));
16+
SerializeAsJson(outgoingData, CreateDataSource(umat));
1717
break;
1818
default:
1919
throw new NotSupportedException(target.GetType().FullName);
2020
}
2121
}
2222

23-
private static MatObjectDataSource CreateDataSource(InputArray inputArray, string description)
23+
private static MatObjectDataSource CreateDataSource(Mat mat)
2424
{
25-
_ = Cv2.ImEncode(".png", inputArray, out var buffer);
25+
using var pngWriteableMat = PreparePngMat(mat);
26+
_ = Cv2.ImEncode(".png", pngWriteableMat, out var buffer);
27+
2628
return new MatObjectDataSource
2729
{
2830
PngDataBase64 = Convert.ToBase64String(buffer),
29-
Width = inputArray.Size().Width,
30-
Height = inputArray.Size().Height,
31-
Description = description
31+
Width = mat.Width,
32+
Height = mat.Height,
33+
Description = mat.ToString()
3234
};
3335
}
36+
37+
private static MatObjectDataSource CreateDataSource(UMat umat)
38+
{
39+
using var mat = umat.GetMat(AccessFlag.READ);
40+
using var pngWriteableMat = PreparePngMat(mat);
41+
_ = Cv2.ImEncode(".png", pngWriteableMat, out var buffer);
42+
43+
return new MatObjectDataSource
44+
{
45+
PngDataBase64 = Convert.ToBase64String(buffer),
46+
Width = umat.Width,
47+
Height = umat.Height,
48+
Description = umat.ToString()
49+
};
50+
}
51+
52+
private static Mat PreparePngMat(Mat mat)
53+
{
54+
var matType = mat.Type();
55+
56+
if (matType.Depth == MatType.CV_USRTYPE1)
57+
{
58+
throw new NotSupportedException("Unsupported MatType: CV_USRTYPE1");
59+
}
60+
else if (matType.IsInteger && matType.Channels != 2)
61+
{
62+
return mat.Clone();
63+
}
64+
else if (matType.Channels == 1)
65+
{
66+
var result = new Mat(mat.Size(), MatType.CV_8UC1);
67+
mat.ConvertTo(result, MatType.CV_8UC1, 255.0);
68+
return result;
69+
//return matType.Depth == MatType.CV_32F ? PrepareFloatImage(mat) : PrepareDoubleImage(mat);
70+
}
71+
else if (matType.Channels == 3)
72+
{
73+
var result = new Mat(mat.Size(), MatType.CV_8UC3);
74+
mat.ConvertTo(result, MatType.CV_8UC3, 255.0);
75+
return result;
76+
}
77+
else if (matType.Channels == 4)
78+
{
79+
var result = new Mat(mat.Size(), MatType.CV_8UC4);
80+
mat.ConvertTo(result, MatType.CV_8UC4, 255.0);
81+
return result;
82+
}
83+
else if (matType.Channels == 2)
84+
{
85+
Cv2.Split(mat, out var twoChannels);
86+
var channels = new[] { twoChannels[0], twoChannels[1], twoChannels[0] };
87+
var result = new Mat(mat.Size(), MatType.CV_8UC3);
88+
Cv2.Merge(channels, result);
89+
return result;
90+
}
91+
throw new NotSupportedException("Unknown Mat format");
92+
}
3493
}

OpenCvSharpVisualizer/OpenCvSharpVisualizer.csproj

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -13,9 +13,6 @@
1313
<Compile Remove="OpenCvSharpVisualizerControl.xaml.cs" />
1414
<None Remove="OpenCvSharpVisualizerControl.xaml" />
1515
<Page Remove="OpenCvSharpVisualizerControl.xaml" />
16-
<None Include="source.extension.vsixmanifest">
17-
<SubType>Designer</SubType>
18-
</None>
1916
</ItemGroup>
2017

2118
<ItemGroup>

0 commit comments

Comments
 (0)