91在线观看视频-91在线观看视频-91在线观看免费视频-91在线观看免费-欧美第二页-欧美第1页

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

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

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

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

新機(jī)器視覺 ? 來源:jsxyhelu 新機(jī)器視覺 ? 作者:jsxyhelu 新機(jī)器視覺 ? 2021-01-12 16:32 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

轉(zhuǎn)自:jsxyhelu 在此特別鳴謝!

cnblogs.com/jsxyhelu/p/GOCW2020.html

一、什么是GOCW

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

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

二、GOCW有什么特點(diǎn)

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

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

  • 直接編寫C++語法程序,方便維護(hù)改進(jìn)

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

  • 開放源代碼

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

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

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

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

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

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

特別需要注意2:

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

  • 配置管理器中,所有項(xiàng)目版本全部使用64位

四、測(cè)試代碼

可以直接參考 WINFROM_DEMO

添加GOCW的頭文件

using GOCW;

編寫GOCW調(diào)用代碼,你也可以根據(jù)需要吧Client的定義放在Form中。你實(shí)際使用過程中需要修改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;
}

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

五、原理簡介

GOCW是通過CLR的方式進(jìn)行調(diào)用,關(guān)于CLR的原理這里不展開。重點(diǎn)將一下你在哪里添加圖像處理算法,打開 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<unsigned char>^ 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<unsigned char>^ pCBuf1, int* errorCode);
    };
}

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

//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ù)實(shí)際算法要求進(jìn)行修改。關(guān)于參數(shù)的傳入傳出,在其他幾個(gè)函數(shù)中都有說明。

六、初步小結(jié)

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

感謝閱讀至此,希望有所幫助!

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

轉(zhuǎn)自:jsxyhelu

cnblogs.com/jsxyhelu/p/GOCW2020.html


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

    關(guān)注

    23

    文章

    4709

    瀏覽量

    95339
  • C語言
    +關(guān)注

    關(guān)注

    180

    文章

    7632

    瀏覽量

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

    關(guān)注

    3

    文章

    4379

    瀏覽量

    64831
  • 代碼
    +關(guān)注

    關(guān)注

    30

    文章

    4900

    瀏覽量

    70689
  • OpenCV
    +關(guān)注

    關(guān)注

    32

    文章

    642

    瀏覽量

    42860

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

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

收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評(píng)論

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

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

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

    OpenCV C++程序編譯與演示

    1、JetsonNano上編譯OpenCV源碼與OpenCV C++ YOLOv5程序演示  編譯OpenCV最新4.5.x版本  Jet
    發(fā)表于 11-10 16:42

    opencv備忘單

    opencv備忘單,opencv_cheatsheet,opencv_tutorials,opencv_user,opencv2refman
    發(fā)表于 08-25 15:52 ?0次下載

    opencv基礎(chǔ)的學(xué)習(xí)手冊(cè)

    the so-called OpenCV 2.x API, which is essentially a C++ API, as opposite to the C-based OpenCV
    發(fā)表于 08-25 15:52 ?0次下載

    Vivado中如何實(shí)現(xiàn)OpenCV設(shè)計(jì)

    觀看視頻,了解OpenCV庫和其一些典型應(yīng)用中的使用,以及Zynq-7000 SoC的優(yōu)點(diǎn)和如何實(shí)現(xiàn)OpenCV設(shè)計(jì)。同時(shí)您還能學(xué)習(xí)到如何在設(shè)計(jì)流程中使用HLS和視頻庫文件。本教程將
    的頭像 發(fā)表于 11-20 06:46 ?4156次閱讀

    MFC中使OpenCV的教程下載

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

    如何快速入門opencv

    OpenCV是計(jì)算機(jī)視覺中最受歡迎的庫,最初由intel使用CC ++進(jìn)行開發(fā)的,現(xiàn)在也可以python中使用。
    的頭像 發(fā)表于 08-30 09:23 ?1355次閱讀

    JetsonNano上編譯OpenCV源碼與OpenCV C++ YOLOv5程序演示

    Jetson Nano自帶的OpenCV版本比較低,Jetpack4.6對(duì)應(yīng)的OpenCV版本為4.1的,有圖為證。
    的頭像 發(fā)表于 11-10 11:28 ?3768次閱讀

    OpenCV常用的 7 個(gè)示例(Python版)1

    OpenCV是計(jì)算機(jī)視覺領(lǐng)域最流行的庫之一。它最初是用 CC++ 編寫的。現(xiàn)在也可以 Python 中使用。它最初是由英特爾開發(fā)的。
    的頭像 發(fā)表于 02-07 16:23 ?1375次閱讀

    OpenCV常用的 7 個(gè)示例(Python版)2

    OpenCV是計(jì)算機(jī)視覺領(lǐng)域最流行的庫之一。它最初是用 CC++ 編寫的。現(xiàn)在也可以 Python 中使用。它最初是由英特爾開發(fā)的。
    的頭像 發(fā)表于 02-07 16:23 ?1247次閱讀

    OpenCV常用的 7 個(gè)示例(Python版)3

    OpenCV是計(jì)算機(jī)視覺領(lǐng)域最流行的庫之一。它最初是用 CC++ 編寫的。現(xiàn)在也可以 Python 中使用。它最初是由英特爾開發(fā)的。
    的頭像 發(fā)表于 02-07 16:23 ?1419次閱讀

    C#中使OpenCV

    為了解決C#下編寫OpenCV程序的問題,我做過比較深入的研究,并且實(shí)現(xiàn)了高效可用的方法GreenOpenCsharpWrapper(GOCW)。通過這種方法,能夠分離界面和算法業(yè)務(wù),高效率完成算法調(diào)用,而且非常方便進(jìn)行算法維
    的頭像 發(fā)表于 04-03 09:45 ?1770次閱讀

    學(xué)習(xí)OpenCV4的系統(tǒng)化路線圖

    OpenCV4發(fā)布測(cè)試版本開始,作者就一直關(guān)注!根據(jù)自己近十年圖像處理OpenCV開發(fā)相關(guān)工作經(jīng)驗(yàn),花了七個(gè)月的時(shí)間,針對(duì)OpenCV4、精心選擇OpenCV中常用模塊與知識(shí)點(diǎn),構(gòu)建
    的頭像 發(fā)表于 07-05 11:30 ?917次閱讀
    學(xué)習(xí)<b class='flag-5'>OpenCV</b>4的系統(tǒng)化路線圖

    OpenCV基礎(chǔ)知識(shí)入門

    OpenCV是計(jì)算機(jī)視覺中最受歡迎的庫,最初由intel使用CC ++進(jìn)行開發(fā)的,現(xiàn)在也可以python中使用。該庫是一個(gè)跨平臺(tái)的開源庫
    的頭像 發(fā)表于 10-29 11:29 ?1043次閱讀
    <b class='flag-5'>OpenCV</b>基礎(chǔ)知識(shí)入門

    opencv-python和opencv一樣嗎

    -Python是OpenCV的一個(gè)Python語言接口,它允許開發(fā)者使用Python語言來調(diào)用OpenCV庫的功能。 雖然OpenCVOpenCV-Python
    的頭像 發(fā)表于 07-16 10:38 ?2080次閱讀
    主站蜘蛛池模板: 35pao免费视频| 六月婷婷精品视频在线观看 | 国模私拍一区二区三区 | 天堂资源bt | 欧美乱妇高清无乱码 | 亚洲乱码尤物193yw在线播放 | 综合色视频 | 男操女视频在线观看 | 免费看黄色网页 | 韩国r天堂| 美女一级免费毛片 | 欧美日韩免费大片 | 97蜜桃| 午夜毛片视频高清不卡免费 | 一本大道一卡二卡四卡 | 午夜精品久久久久久久第一页 | 日韩毛片大全 | 香蕉视频色版在线观看 | 四虎成人免费观看在线网址 | 男女爱爱免费 | 特大一级aaaaa毛片 | 日本黄色录象 | 717影院理伦午夜论八戒 | 五月激情啪啪网 | 两性色午夜视频免费网 | 久久狠狠色噜噜狠狠狠狠97 | 黄网在线免费观看 | 国产日韩精品一区二区在线观看 | 久久羞羞视频 | 综合成人在线 | 欧美极品在线视频 | 天天摸天天爽天天澡视频 | 天天干天天拍天天射天天添天天爱 | 男人边吃奶边做视频免费网站 | 激情综合网站 | 免费国产黄网站在线观看视频 | 99久久99久久精品国产 | 香蕉视频网站在线播放 | 中日韩精品视频在线观看 | xxx性xxx乱 | 1024手机在线看 |