在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

C#中使用OpenCV

新機器視覺 ? 來源:博客園 ? 2023-04-03 09:45 ? 次閱讀

一、什么是GOCW

為了解決在C#下編寫OpenCV程序的問題,我做過比較深入的研究,并且實現(xiàn)了高效可用的方法GreenOpenCsharpWrapper(GOCW)。通過這種方法,能夠分離界面和算法業(yè)務(wù),高效率完成算法調(diào)用,而且非常方便進行算法維護。應(yīng)該說是我在多年項目實踐中不斷總結(jié)提煉出來的一點東西。

GOCW的發(fā)布地址為:https://gitee.com/jsxyhelu2020/gocw

二、GOCW有什么特點

分離界面和算法業(yè)務(wù)

圖像數(shù)據(jù)直接通過內(nèi)存?zhèn)髦担咝释瓿伤惴ㄕ{(diào)用

直接編寫C++語法程序,方便維護改進

在C#中可以通過CLR方式引用,提供函數(shù)級別接口

開放源代碼

三、GOCW在VS中的環(huán)境配置

下載gocw_master,解壓后獲得兩個目錄文件。

fcd976b2-d158-11ed-bfe3-dac502259ad0.png

其中,GOCW是類庫文件,而WINFORM_DEMO是引用范例。

使用VS2017或者更高版本打開WINFORM_DEMO.sln(或新建winform程序),在“引用”處添加GOCW的引用。

fcebf378-d158-11ed-bfe3-dac502259ad0.png

特別需要注意,正確編譯GOCW需要OpenCV的正確配置,所以需要正確設(shè)置include和lib,并且保證對應(yīng)版本的dll文件能夠被正確訪問。

fd0ce48e-d158-11ed-bfe3-dac502259ad0.png

fd2b6d64-d158-11ed-bfe3-dac502259ad0.png

特別需要注意1:保證dll和csharp程序的.net目標(biāo)框架是一致的

fd46854a-d158-11ed-bfe3-dac502259ad0.png

fd68f292-d158-11ed-bfe3-dac502259ad0.png

特別需要注意2:

保證dll和csharp程序的.net目標(biāo)框架是一致的

配置管理器中,所有項目版本全部使用64位

fd82c438-d158-11ed-bfe3-dac502259ad0.png

四、測試代碼

可以直接參考 WINFROM_DEMO

fd94fa40-d158-11ed-bfe3-dac502259ad0.png

添加GOCW的頭文件

using GOCW;

編寫GOCW調(diào)用代碼,你也可以根據(jù)需要吧Client的定義放在Form中。你實際使用過程中需要修改lena的地址。

private void button1_Click(object sender, EventArgs e)
{
    Bitmap bmp = (Bitmap)Bitmap.FromFile("e:/template/lena.jpg");
    GOCWClass client = new GOCWClass();
    //調(diào)用圖像處理算法
    MemoryStream ms = new MemoryStream();
    bmp.Save(ms, System.Drawing.Imaging.ImageFormat.Jpeg);
    byte[] bytes = ms.GetBuffer();
    Bitmap bitmap = client.testMethod(bytes);
    pictureBox1.Image = bitmap;
}

可以看到,實現(xiàn)了"灰度"變化。

五、原理簡介

GOCW是通過CLR的方式進行調(diào)用,關(guān)于CLR的原理這里不展開。重點將一下你在哪里添加圖像處理算法,打開 GOCW.h文件

#pragma once
#include "opencv.hpp"
#using 
using namespace System;
using namespace System::Data;
using namespace System::IO;
using namespace System::Drawing;
using namespace System::Imaging;
using namespace std;
namespace GOCW {
    public ref class GOCWClass
    {
      public:
      /////例子函數(shù)//////
      //1.傳遞圖像
      /*  MemoryStream ms = new MemoryStream();
        b.Save(ms, System.Drawing.Imaging.ImageFormat.Jpeg);
        byte[] bytes = ms.GetBuffer();
        Bitmap bitmap = client.testMethod(bytes);*/
        Bitmap^  GOCWClass::array^ pCBuf1);
        //2.引用傳遞int
        /*unsafe
        {
          int* value = stackalloc int[1];
          value[0] = 0;
          int iret = client.allTest(2, 3, value);
        }*/
        int GOCWClass::allTest(int a, int b, int* c);
        //3.引用傳遞字符串
        System::String^ GOCWClass::String^ inputStr);
        /////業(yè)務(wù)函數(shù)//////
        /*unsafe
        {
            int* value = stackalloc int[1];//返回代碼
            value[0] = 0;
            bitmap = client.fetchresult(bytes, value);//調(diào)用來自GOClrClasslibrary圖像處理算法
            if (value[0] == 0)//0真1假
            {
                res = true;
            }
            else
            {
                res = false;
            }
        }*/
        Bitmap^  GOCWClass::array^ pCBuf1, int* errorCode);
    };
}

這里以"三明治"的方法將各種實現(xiàn)的方法進行了申明,具體的實現(xiàn)在GOCW.cpp中,比如我們舉一個例子。

//1.傳遞圖像
Bitmap^  GOCWClass::array^ pCBuf1)
{
    ////////////////////////////////將輸入cli::array轉(zhuǎn)換為cv::Mat/////////////////////////
    pin_ptr p1 = &pCBuf1[0];
    unsigned char* pby1 = p1;
    cv::Mat img_data1(pCBuf1->Length, 1, CV_8U, pby1);
    cv::Mat img_object = cv::imdecode(img_data1, cv::IMREAD_UNCHANGED);
    if (!img_object.data)
        return nullptr;
    ////////////////////////////////////////////OpenCV的算法處理過程////////////////////////////////////
    Mat draw = img_object.clone();
    cvtColor(draw, draw, COLOR_BGR2GRAY);
    cvtColor(draw, draw, COLOR_GRAY2BGR);
    /////////////////////////將cv::Mat轉(zhuǎn)換為Bitmap(只能傳輸cv_8u3格式數(shù)據(jù))///////////////////////////////
    if (!draw.data)
        return nullptr;
    Bitmap^ bitmap = MatToBitmap(draw);
    return bitmap;
}

在這段代碼中

Mat draw = img_object.clone();
cvtColor(draw, draw, COLOR_BGR2GRAY);
cvtColor(draw, draw, COLOR_GRAY2BGR);

是具體業(yè)務(wù)函數(shù),可以根據(jù)實際算法要求進行修改。關(guān)于參數(shù)的傳入傳出,在其他幾個函數(shù)中都有說明。

六、初步小結(jié)

雖然GOCW相比較OpenCVSharp復(fù)雜一點,但是它能夠和現(xiàn)有系統(tǒng)更緊密結(jié)合,優(yōu)勢也非常明顯。如果你首先是圖像處理開發(fā)者,需要為算法尋找一個可以運行的平臺,那么GOCW基于CLR的封裝形式,肯定更適合你!

審核編輯:湯梓紅

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 算法
    +關(guān)注

    關(guān)注

    23

    文章

    4698

    瀏覽量

    94735
  • 內(nèi)存
    +關(guān)注

    關(guān)注

    8

    文章

    3108

    瀏覽量

    74986
  • 程序
    +關(guān)注

    關(guān)注

    117

    文章

    3823

    瀏覽量

    82406
  • 函數(shù)
    +關(guān)注

    關(guān)注

    3

    文章

    4370

    瀏覽量

    64193
  • OpenCV
    +關(guān)注

    關(guān)注

    32

    文章

    642

    瀏覽量

    42434

原文標(biāo)題:C# 中使用 OpenCV

文章出處:【微信號:vision263com,微信公眾號:新機器視覺】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏

    評論

    相關(guān)推薦
    熱點推薦

    如何在OpenCV中使用基于深度學(xué)習(xí)的邊緣檢測?

    在這篇文章中,我們將學(xué)習(xí)如何在OpenCV中使用基于深度學(xué)習(xí)的邊緣檢測,它比目前流行的canny邊緣檢測器更精確。
    的頭像 發(fā)表于 05-19 09:52 ?2371次閱讀
    如何在<b class='flag-5'>OpenCV</b><b class='flag-5'>中使</b>用基于深度學(xué)習(xí)的邊緣檢測?

    C#完全手冊

    C#語言概述點NET編程語言C#運行環(huán)境編寫第一個程序C#程序設(shè)計基礎(chǔ)數(shù)據(jù)類型變量和和常量......
    發(fā)表于 05-21 22:00 ?144次下載

    C#教程之DesignInGoodsBill

    C#教程之DesignInGoodsBill,很好的C#資料,快來學(xué)習(xí)吧。
    發(fā)表于 04-20 11:13 ?11次下載

    C#教程之DesignStuCertificate

    C#教程之DesignStuCertificate,很好的C#資料,快來學(xué)習(xí)吧。
    發(fā)表于 04-20 11:13 ?10次下載

    C#教程之PrintDirection

    C#教程之PrintDirection,很好的C#資料,快來學(xué)習(xí)吧。
    發(fā)表于 04-20 13:50 ?18次下載

    C#教程之PrintGoodsOutBill

    C#教程之PrintGoodsOutBill,很好的C#資料,快來學(xué)習(xí)吧。
    發(fā)表于 04-20 13:50 ?4次下載

    C#教程之PrintImage

    C#教程之PrintImage,很好的C#資料,快來學(xué)習(xí)吧。
    發(fā)表于 04-20 13:50 ?14次下載

    C#教程之PrintOneCertificate

    C#教程之PrintOneCertificate,很好的C#資料,快來學(xué)習(xí)吧。
    發(fā)表于 04-20 13:50 ?8次下載

    C#教程之PrintTexte

    C#教程之PrintTexte,很好的C#資料,快來學(xué)習(xí)吧。
    發(fā)表于 04-20 13:50 ?5次下載

    C#教程之ShowCReport

    C#教程之ShowCReport,很好的C#資料,快來學(xué)習(xí)吧。
    發(fā)表于 04-20 14:06 ?15次下載

    《Visual C# 2005開發(fā)技術(shù)》C#與.NET Fram

    《Visual C# 2005開發(fā)技術(shù)》C#與.NET Framework簡介
    發(fā)表于 02-07 15:11 ?0次下載

    《Visual C# 2005開發(fā)技術(shù)》C#程序設(shè)計基礎(chǔ)

    《Visual C# 2005開發(fā)技術(shù)》C#程序設(shè)計基礎(chǔ)
    發(fā)表于 02-07 15:11 ?0次下載

    OpenCV課程分享 怎么在C#中使OpenCV

    ? 轉(zhuǎn)自:jsxyhelu? 在此特別鳴謝! cnblogs.com/jsxyhelu/p/GOCW2020.html 一、什么是GOCW ? 為了解決在C#下編寫OpenCV程序的問題,我做過比較
    的頭像 發(fā)表于 01-12 16:32 ?4145次閱讀

    在MFC中使OpenCV的教程下載

    在MFC中使OpenCV的教程下載
    發(fā)表于 06-26 14:35 ?2次下載

    如何在c#語言代碼中使用HTTP代理IP

    如何在c#語言代碼中使用HTTP代理IP,示例代碼demo直接可用(步驟注釋清晰)
    的頭像 發(fā)表于 08-05 16:33 ?2943次閱讀
    主站蜘蛛池模板: 久精品视频村上里沙 | 天天插插插| 人人草草 | 午夜大片男女免费观看爽爽爽尤物 | 久久精品最新免费国产成人 | 日韩精品一级毛片 | 国产小片 | videosgratis乱色欧美野外 | 日本片巨大的乳456线观看 | 韩国朴银狐诱感在线观看 | 久久亚洲国产成人精品性色 | 5060午夜一级| 狠狠色丁香久久婷婷综 | 日韩免费观看视频 | 日本免费一区二区老鸭窝 | 国产片翁熄系列乱在线视频 | 日韩午夜片 | 久久国产精品免费看 | 看真人一一级毛片 | 国产一级aaa全黄毛片 | 亚洲你xx我xx网站 | 国模一区二区三区私啪啪 | 国产精品李雅在线观看 | 韩国理伦片在线观看2828 | 日日干夜夜操 | 欧美区在线播放 | 欧美一级在线观看播放 | 天天躁狠狠躁 | 国产主播在线看 | 男人日女人视频免费看 | 国产成人高清 | 色多多免费观看在线 | 4438x亚洲最大 | 久久精品国产99精品最新 | 天天干天天射天天插 | 不卡无毒免费毛片视频观看 | 久久亚洲国产成人精品性色 | 真爽~张开腿~让我插 | 白嫩少妇激情无码 | 天堂网2021天堂手机版丶 | 成人网在线视频 |