首页 > 编程知识 正文

inrange函数 opencv,inrange函数matlab

时间:2023-05-06 20:51:02 阅读:266443 作者:2195

 

using OpenCvSharp;using OpenCvSharp.Extensions;using static OpenCvSharp.Cv2;using System.Drawing;namespace RcoloR{ class Program { static Bitmap Mybmp = new Bitmap("E:/CVIMG/lenna.png"); static void Main(string[] args) { using (new Window("SRC", WindowMode.Normal, Mybmp.ToMat())) ; //source image Prtsc(Mybmp, out Bitmap dst); //crop image MyInrange(dst,out Bitmap dstbmp); // Inrange using (new Window("DST", WindowMode.Normal, dstbmp.ToMat())); //show the inranged image WaitKey(); } static void Prtsc(Bitmap src, out Bitmap dst) // crop image { dst = new Bitmap(300,300); using (Graphics g = Graphics.FromImage(dst)) { g.DrawImage(src,new Rectangle(0,0,300,300),new Rectangle(0,0,300,300),GraphicsUnit.Pixel); } } static void MyInrange(Bitmap bmpsrc,out Bitmap dstbmp) // Cv2.Inrange(); { using (Mat src = bmpsrc.ToMat()) using (Mat dst = new Mat()) { Scalar low_value = new Scalar(100, 100, 100); Scalar high_value = new Scalar(255, 255, 255); InRange(src, low_value, high_value, dst); dstbmp = dst.ToBitmap(); float sres = CountNonZero(dst) / (src.Width * src.Height * 1.0f ) * 100; System.Console.WriteLine(sres); } } }}

运行代码后结果是这样的:

dst处理后全是黑色,去github上问opencvsharp的作者,他给我的回复如下:

他的意思是因为dst图像的像素格式不对,导致转换成mat的 时候,格式不是InRange函数要求的格式。

然后修改代码,代码和运行效果如下:

 

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。