如何使用opencvsharp统计一张图片(二值化后)中的白色像素点占比

l364420189 2019-07-24 10:55:46
图像处理刚开始看,请求大哥们帮助,给个方法

...全文
1210 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
橘子皮... 2019-07-25
  • 打赏
  • 举报
回复
最新版本的opencvsharp 取反色代码到底怎么写速度最快啊,我写的代码速度慢的比我自己写的还慢,处理个图要19秒。。。

Public Sub OpenCv_FanSe(ByRef src As Mat)           '旋转图像
        Dim grayImage As New Mat(), h, w As Integer, b, g, r As Byte

        h = src.Rows : w = src.Cols

        Dim channels As Integer = src.Channels()
        'Cv2.CvtColor(src, grayImage, ColorConversionCodes.BGR2GRAY)

        For i As Integer = 0 To h - 1
            For j As Integer = 0 To w - 1
				'If channels = 1 Then
				'    Dim gray As Byte = grayImage.Get(Of Byte)(i, j)
				'    grayImage.Set(Of Byte)(i, j, CByte(Byte.MaxValue - gray))
				'ElseIf channels = 3 Then
				'Dim b As Byte = img2.At(Of Vec3b)(i, j).Item0
				'Dim g As Byte = img2.At(Of Vec3b)(i, j).Item1
				'Dim r As Byte = img2.At(Of Vec3b)(i, j).Item2

				b = src.At(Of Vec3b)(i, j).Item(0)
				g = src.At(Of Vec3b)(i, j).Item(1)
				r = src.At(Of Vec3b)(i, j).Item(2)
				src.Set(Of Vec3b)(i, j, New Vec3b(CByte(255 - b), CByte(255 - g), CByte(255 - r)))

				'End If
			Next
        Next
    End Sub
请大家看看怎么改速度最快
橘子皮... 2019-07-25
  • 打赏
  • 举报
回复
引用 4 楼 wangyx92528 的回复:
你试试,用直方图

Image<Gray, byte> image = new Image<Gray, byte>(bitmap);
Image<Gray, byte> image_threshold = image.CopyBlank();
CvInvoke.Threshold(image, image_threshold, 100, 255, ThresholdType.Binary);
DenseHistogram hist = new DenseHistogram(256, new RangeF(0f, 256f));
hist.Calculate(new Image<Gray, byte>[] { image_threshold }, false, null);
float[] datas = hist.GetBinValues();
float blackCount = datas[0];
float whiteCount = datas[255];
Console.WriteLine(blackCount + " " + whiteCount);
你这是不是老版本,很多命令都不存在
wangyx92528 2019-07-25
  • 打赏
  • 举报
回复
你试试,用直方图

Image<Gray, byte> image = new Image<Gray, byte>(bitmap);
Image<Gray, byte> image_threshold = image.CopyBlank();
CvInvoke.Threshold(image, image_threshold, 100, 255, ThresholdType.Binary);
DenseHistogram hist = new DenseHistogram(256, new RangeF(0f, 256f));
hist.Calculate(new Image<Gray, byte>[] { image_threshold }, false, null);
float[] datas = hist.GetBinValues();
float blackCount = datas[0];
float whiteCount = datas[255];
Console.WriteLine(blackCount + " " + whiteCount);
l364420189 2019-07-25
  • 打赏
  • 举报
回复
引用 2 楼 OrdinaryCoder 的回复:
用二值化图取直方图 然后取像素值为255的个数 之后和整张图像像素个数做个除法


能给个实现代码么? 知识欠缺,不知道该怎么实现。
下面是我的代码部分



OrdinaryCoder 2019-07-25
  • 打赏
  • 举报
回复
用二值化图取直方图 然后取像素值为255的个数 之后和整张图像像素个数做个除法
l364420189 2019-07-24
  • 打赏
  • 举报
回复
引用 楼主 l364420189的回复:
图像处理刚开始看,请求大哥们帮助,给个方法

自顶一下,不要沉了,求帮助

110,473

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧