国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

C# OpenCvSharp 玉米粒計(jì)數(shù)

這篇具有很好參考價(jià)值的文章主要介紹了C# OpenCvSharp 玉米粒計(jì)數(shù)。希望對大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

目錄

效果

項(xiàng)目

代碼

下載


效果

玉米粒計(jì)數(shù)

C# OpenCvSharp 玉米粒計(jì)數(shù),OpenCvSharp,C#,C#  玉米粒計(jì)數(shù),opencv,計(jì)算機(jī)視覺,人工智能

項(xiàng)目

C# OpenCvSharp 玉米粒計(jì)數(shù),OpenCvSharp,C#,C#  玉米粒計(jì)數(shù),opencv,計(jì)算機(jī)視覺,人工智能

代碼

主要處理步驟
1、二值化操作
2、腐蝕
3、距離變換
4、形態(tài)學(xué)處理
5、找到種子的輪廓區(qū)域

????????OpenCV中,函數(shù)distanceTransform()用于計(jì)算圖像中每一個(gè)非零點(diǎn)像素與其最近的零點(diǎn)像素之間的距離,
????????輸出的是保存每一個(gè)非零點(diǎn)與最近零點(diǎn)的距離信息,圖像上越亮的點(diǎn),代表了離零點(diǎn)的距離越遠(yuǎn)。
????????用途:
????????可以根據(jù)距離變換的這個(gè)性質(zhì),經(jīng)過簡單的運(yùn)算,用于細(xì)化字符的輪廓和查找物體質(zhì)心(中心)。

????????距離變換的處理圖像通常都是二值圖像,而二值圖像其實(shí)就是把圖像分為兩部分,即背景和物體兩部分,物體通常又稱為前景目標(biāo)。
????????通常我們把前景目標(biāo)的灰度值設(shè)為255(即白色),背景的灰度值設(shè)為0(即黑色)。
????????所以定義中的非零像素點(diǎn)即為前景目標(biāo),零像素點(diǎn)即為背景。
????????所以圖像中前景目標(biāo)中的像素點(diǎn)距離背景越遠(yuǎn),那么距離就越大,如果我們用這個(gè)距離值替換像素值,那么新生成的圖像中這個(gè)點(diǎn)越亮。

//User:用戶自定義
//L1: ?曼哈頓距離
//L2: ?歐式距離
//C: ? 棋盤距離
Cv2.DistanceTransform(morhImage, dist, DistanceTypes.L1, DistanceTransformMasks.Mask3);

//
// 摘要:
// ? ? Applies a fixed-level threshold to each array element.
//
// 參數(shù):
// ? src:
// ? ? input array (single-channel, 8-bit or 32-bit floating point).
//
// ? dst:
// ? ? output array of the same size and type as src.
//
// ? thresh:
// ? ? threshold value.
//
// ? maxval:
// ? ? maximum value to use with the THRESH_BINARY and THRESH_BINARY_INV thresholding
// ? ? types.
//
// ? type:
// ? ? thresholding type (see the details below).
//
// 返回結(jié)果:
// ? ? the computed threshold value when type == OTSU
public static double Threshold(InputArray src, OutputArray dst, double thresh, double maxval, ThresholdTypes type)

using OpenCvSharp;
using System;
using System.Drawing;
using System.Text;
using System.Windows.Forms;

namespace OpenCvSharp_Demo
{
    public partial class frmMain : Form
    {
        public frmMain()
        {
            InitializeComponent();
        }

        string fileFilter = "*.*|*.bmp;*.jpg;*.jpeg;*.tiff;*.tiff;*.png";
        string image_path = "";

        DateTime dt1 = DateTime.Now;
        DateTime dt2 = DateTime.Now;

        Mat image;
        Mat result_image;

        StringBuilder sb = new StringBuilder();

        private void button1_Click(object sender, EventArgs e)
        {
            OpenFileDialog ofd = new OpenFileDialog();
            ofd.Filter = fileFilter;
            if (ofd.ShowDialog() != DialogResult.OK) return;

            pictureBox1.Image = null;
            pictureBox2.Image = null;
            textBox1.Text = "";

            image_path = ofd.FileName;
            pictureBox1.Image = new Bitmap(image_path);
            image = new Mat(image_path);
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            //test
            image_path = "test_img/1.jpg";
            image = new Mat(image_path);
            pictureBox1.Image = new Bitmap(image_path);
        }

        private void button2_Click(object sender, EventArgs e)
        {
            if (image_path == "")
            {
                return;
            }
            textBox1.Text = "檢測中,請稍等……";
            pictureBox2.Image = null;
            Application.DoEvents();

            result_image = image.Clone();

            //二值化操作
            Mat grayimg = new Mat();
            Cv2.CvtColor(image, grayimg, ColorConversionCodes.BGR2GRAY);
            Mat BinaryImg = new Mat();
            Cv2.Threshold(grayimg, BinaryImg, 240, 255, ThresholdTypes.Binary);
            //Cv2.ImShow("二值化", BinaryImg);

            //腐蝕
            Mat kernel = Cv2.GetStructuringElement(MorphShapes.Rect, new OpenCvSharp.Size(15, 15));
            Mat morhImage = new Mat();
            Cv2.Dilate(BinaryImg, morhImage, kernel, null, 2);
            //Cv2.ImShow("morphology", morhImage);

            //距離變換:用于二值化圖像中的每一個(gè)非零點(diǎn)距自己最近的零點(diǎn)的距離,距離變換圖像上越亮的點(diǎn),代表了這一點(diǎn)距離零點(diǎn)的距離越遠(yuǎn)
            Mat dist = new Mat();
            Cv2.BitwiseNot(morhImage, morhImage);
            /*
            OpenCV中,函數(shù)distanceTransform()用于計(jì)算圖像中每一個(gè)非零點(diǎn)像素與其最近的零點(diǎn)像素之間的距離,
            輸出的是保存每一個(gè)非零點(diǎn)與最近零點(diǎn)的距離信息,圖像上越亮的點(diǎn),代表了離零點(diǎn)的距離越遠(yuǎn)。
            用途:
            可以根據(jù)距離變換的這個(gè)性質(zhì),經(jīng)過簡單的運(yùn)算,用于細(xì)化字符的輪廓和查找物體質(zhì)心(中心)。
            */
            /*
            距離變換的處理圖像通常都是二值圖像,而二值圖像其實(shí)就是把圖像分為兩部分,即背景和物體兩部分,物體通常又稱為前景目標(biāo)。
            通常我們把前景目標(biāo)的灰度值設(shè)為255(即白色),背景的灰度值設(shè)為0(即黑色)。
            所以定義中的非零像素點(diǎn)即為前景目標(biāo),零像素點(diǎn)即為背景。
            所以圖像中前景目標(biāo)中的像素點(diǎn)距離背景越遠(yuǎn),那么距離就越大,如果我們用這個(gè)距離值替換像素值,那么新生成的圖像中這個(gè)點(diǎn)越亮。
            */
            //User:用戶自定義
            //L1:  曼哈頓距離
            //L2:  歐式距離
            //C:   棋盤距離
            Cv2.DistanceTransform(morhImage, dist, DistanceTypes.L1, DistanceTransformMasks.Mask3);
            Cv2.Normalize(dist, dist, 0, 1.0, NormTypes.MinMax);   //范圍在0~1之間
            //Cv2.ImShow("distance", dist);

            //形態(tài)學(xué)處理
            Mat MorphImg = new Mat();
            dist.ConvertTo(MorphImg, MatType.CV_8U);
            Cv2.Threshold(MorphImg, MorphImg, 0.99, 255, ThresholdTypes.Binary);  //上圖像素值在0~1之間
            kernel = Cv2.GetStructuringElement(MorphShapes.Rect, new OpenCvSharp.Size(7, 3), new OpenCvSharp.Point(-1, -1));
            Cv2.MorphologyEx(MorphImg, MorphImg, MorphTypes.Open, kernel);  //開操作
            //Cv2.ImShow("t-distance", MorphImg);

            //找到種子的輪廓區(qū)域
            OpenCvSharp.Point[][] contours;
            HierarchyIndex[] hierarchly;
            Cv2.FindContours(MorphImg, out contours, out hierarchly, RetrievalModes.External, ContourApproximationModes.ApproxSimple, new OpenCvSharp.Point(0, 0));
            Mat markers = Mat.Zeros(image.Size(), MatType.CV_8UC3);
            int x, y, w, h;
            Rect rect;
            for (int i = 0; i < contours.Length; i++)
            {
                // Cv2.DrawContours(markers, contours, i, Scalar.RandomColor(), 2, LineTypes.Link8, hierarchly);
                rect = Cv2.BoundingRect(contours[i]);
                x = rect.X;
                y = rect.Y;
                w = rect.Width;
                h = rect.Height;
                Cv2.Circle(result_image, x + w / 2, y + h / 2, 20, new Scalar(0, 0, 255), -1);
                if (i >= 9)
                {
                    Cv2.PutText(result_image, (i + 1).ToString(), new OpenCvSharp.Point(x + w / 2 - 18, y + h / 2 + 8), HersheyFonts.HersheySimplex, 0.8, new Scalar(0, 255, 0), 2);
                }
                else
                {
                    Cv2.PutText(result_image, (i + 1).ToString(), new OpenCvSharp.Point(x + w / 2 - 8, y + h / 2 + 8), HersheyFonts.HersheySimplex, 0.8, new Scalar(0, 255, 0), 2);
                }
            }

            textBox1.Text = "number of corns: " + contours.Length;
            pictureBox2.Image = new Bitmap(result_image.ToMemoryStream());


        }

        private void pictureBox2_DoubleClick(object sender, EventArgs e)
        {
            Common.ShowNormalImg(pictureBox2.Image);
        }

        private void pictureBox1_DoubleClick(object sender, EventArgs e)
        {
            Common.ShowNormalImg(pictureBox1.Image);
        }
    }
}

下載

Demo下載文章來源地址http://www.zghlxwxcb.cn/news/detail-758419.html

到了這里,關(guān)于C# OpenCvSharp 玉米粒計(jì)數(shù)的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • C#基于OpenCv(OpenCvSharp) 的 fftshift, ifftshift 函數(shù)的實(shí)現(xiàn)

    本文實(shí)現(xiàn)基于 OpenCv ( OpenCvSharp )?的 fftshift, ifftshift 函數(shù)。 fftshift 函數(shù)將信號頻譜的零頻分量移動(dòng)到數(shù)組中心, 本質(zhì)是分別對調(diào)一三象限數(shù)據(jù)。 ifftshift完成相反的操作,本質(zhì)是二四象限的數(shù)據(jù)塊。 OpenCV中沒有這兩個(gè)函數(shù)如果使用需要自己實(shí)現(xiàn)。 實(shí)現(xiàn)代碼如下:

    2024年02月14日
    瀏覽(25)
  • C#使用OpenCv(OpenCVSharp)圖像局部二值化處理實(shí)例

    ? 本文實(shí)例演示C#語言中如何使用OpenCv(OpenCVSharp)對圖像進(jìn)行局部二值化處理。 目錄 圖像二值化原理 局部二值化 自適應(yīng)閾值 實(shí)例 效果

    2024年02月13日
    瀏覽(25)
  • C#使用OpenCv(OpenCVSharp)圖像全局二值化處理實(shí)例

    本文實(shí)例演示C#語言中如何使用OpenCv(OpenCVSharp)對圖像進(jìn)行全局二值化處理。 目錄 圖像二值化原理 函數(shù)原型 參數(shù)說明 實(shí)例 效果

    2024年02月13日
    瀏覽(30)
  • OpenCvSharp (C# OpenCV) 實(shí)現(xiàn)掃描文本矯正應(yīng)用與實(shí)現(xiàn)詳解(附源碼)

    OpenCvSharp (C# OpenCV) 實(shí)現(xiàn)掃描文本矯正應(yīng)用與實(shí)現(xiàn)詳解(附源碼)

    導(dǎo)? 讀 ????本文主要介紹使用OpenCV對掃描文本矯正的應(yīng)用實(shí)例及詳細(xì)實(shí)現(xiàn)步驟。 背景介紹 ? ? 在使用打印機(jī)或掃描儀掃描文檔時(shí),由于擺放位置差異難免造成掃描文檔的傾斜。本文將使用OpenCV將傾斜的文檔矯正水平并去除黑邊。?? 實(shí)現(xiàn)步驟 ? ??本文只針對包含大部分文

    2024年02月16日
    瀏覽(78)
  • C#使用OpenCv(OpenCVSharp)圖像處理實(shí)例:亮度、對比度、灰度

    本文實(shí)例演示C#語言中如何使用OpenCv(OpenCVSharp)對圖像進(jìn)行亮度、對比度、灰度處理。 目錄 亮度和對比度原理 灰度 實(shí)例 圖像亮度通俗理解便是圖像的明暗程度,數(shù)字圖像?f(x,y) = i(x,y) r(x, y)?,如果灰度值在[0,255]之間,則?f?值越接近0亮度越低,f?值越接近255亮度越

    2024年02月13日
    瀏覽(27)
  • OpenCvSharp (C# OpenCV) 二維碼畸變矯正--基于透視變換(附源碼)

    ? ? 本文主要介紹如何使用OpenCvSharp中的透視變換來實(shí)現(xiàn)二維碼的畸變矯正。 ? ? 由于CSDN文章中貼二維碼會導(dǎo)致顯示失敗,大家可以直接點(diǎn)下面鏈接查看圖片: ? ??C# OpenCV實(shí)現(xiàn)二維碼畸變矯正--基于透視變換 (詳細(xì)步驟 + 代碼) ? ? ?講解實(shí)現(xiàn)步驟之前先看下效果(左邊是原圖

    2024年02月15日
    瀏覽(32)
  • C#使用OpenCv(OpenCVSharp)圖像直方圖均衡化處理實(shí)例

    本文實(shí)例演示C#語言中如何使用OpenCv(OpenCVSharp)對圖像進(jìn)行直方圖均衡化處理。 直方圖均衡化原理 直方圖均衡化(Histogram Equalization)是一種常用的圖像增強(qiáng)技術(shù),用于改善圖像的對比度和亮度分布。它通過重新分配圖像灰度級的像素值,使得圖像的直方圖在灰度范圍內(nèi)更加

    2024年02月07日
    瀏覽(76)
  • C#使用OpenCv(OpenCVSharp)使用攝像頭視頻顯示和錄制及圖片保存、本地視頻顯示

    本篇實(shí)例講解基于OpenCvSharp實(shí)現(xiàn)了攝像頭視頻顯示、錄制及截圖、視頻保存,本地視頻的顯示功能。 目錄 創(chuàng)建winform項(xiàng)目添加控件 NuGet安裝opencvsharp ?代碼 ?運(yùn)行效果 實(shí)例實(shí)現(xiàn)過程

    2024年02月15日
    瀏覽(28)
  • C# OpenCvSharp 通道分離

    C# OpenCvSharp 通道分離

    目錄 效果 項(xiàng)目 代碼 下載? using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; using OpenCvSharp; using OpenCvSharp.Extensions; namespace OpenCvSharp_通道分離 { ? ? public partial class Form1 : Form ? ? { ? ?

    2024年02月09日
    瀏覽(19)
  • c# OpenCvSharp安裝(一)

    c# OpenCvSharp安裝(一)

    一? 通過NuGet 安裝四個(gè)拓展包 OpenCvSharp4、OpenCvSharp4.Extensions、OpenCvSharp4.runtime.win、OpenCvSharp4.WpfExtensions C#使用OpenCV的一些代碼 需要加頭文件 using OpenCvSharp; ??//為了使用opencv using Point = OpenCvSharp.Point; ??//為了確定我們使用的point是opencv的而不是draw的 ? ?c# OpenCV相關(guān)文章目錄

    2024年04月16日
    瀏覽(14)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包