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

C++&Python&C# 三語言O(shè)penCV從零開發(fā)(6):邊界填充+Csharp調(diào)用Python matplotlib代碼

這篇具有很好參考價值的文章主要介紹了C++&Python&C# 三語言O(shè)penCV從零開發(fā)(6):邊界填充+Csharp調(diào)用Python matplotlib代碼。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點(diǎn)擊"舉報違法"按鈕提交疑問。

相關(guān)鏈接

C++&Python&Csharp in OpenCV 專欄

【2022B站最好的OpenCV課程推薦】OpenCV從入門到實(shí)戰(zhàn) 全套課程(附帶課程課件資料+課件筆記)

前言

今天來接著學(xué)習(xí)OpenCV,現(xiàn)在主要是以Python代碼為主了,所以先實(shí)現(xiàn)Python,在用C++/Csharp重現(xiàn)一遍。

測試圖片

C++&Python&C# 三語言O(shè)penCV從零開發(fā)(6):邊界填充+Csharp調(diào)用Python matplotlib代碼,C++&Python&Csharp in OpenCV,c++,python,c#

邊界填充

邊界填充就是向外填充圖片信息,將圖片擴(kuò)大。填充分為上下左右四個方向,所以我們要指定四個方向的填充大小。
C++&Python&C# 三語言O(shè)penCV從零開發(fā)(6):邊界填充+Csharp調(diào)用Python matplotlib代碼,C++&Python&Csharp in OpenCV,c++,python,c#

python

# %%
# 導(dǎo)入包
import cv2
import matplotlib.pyplot as plt
import numpy as np

image = cv2.imread("D:/workSpace/OpenCV/HellOpenCV/Resources/image/cat.png")

# 聲明填充區(qū)域
fill = {
    'top':50,
    'bottom':50,
    'left':50,
    'right':50
}

# 填充也有很多的算法,我們這里嘗試幾個算法

replicate = cv2.copyMakeBorder(image,fill['top'],fill['bottom'],fill['left'],fill['right'], cv2.BORDER_REPLICATE)
reflect = cv2.copyMakeBorder(image,fill['top'],fill['bottom'],fill['left'],fill['right'],cv2.BORDER_REFLECT)
reflect101 = cv2.copyMakeBorder(image,fill['top'],fill['bottom'],fill['left'],fill['right'],cv2.BORDER_REFLECT_101)
wrap = cv2.copyMakeBorder(image,fill['top'],fill['bottom'],fill['left'],fill['right'],cv2.BORDER_WRAP)
constant = cv2.copyMakeBorder(image,fill['top'],fill['bottom'],fill['left'],fill['right'],cv2.BORDER_CONSTANT,value=0)

plt.subplot(231),plt.imshow(image,'gray'),plt.title('ORIGINAL')
plt.subplot(232),plt.imshow(replicate,'gray'),plt.title('replicate')
plt.subplot(233),plt.imshow(reflect,'gray'),plt.title('reflect')
plt.subplot(234),plt.imshow(reflect101,'gray'),plt.title('reflect101')
plt.subplot(235),plt.imshow(wrap,'gray'),plt.title('wrap')
plt.subplot(236),plt.imshow(constant,'gray'),plt.title('constant')


plt.show()

# cv2.imshow("python",image)
# cv2.waitKey(0)
# cv2.destroyAllWindows()

C++&Python&C# 三語言O(shè)penCV從零開發(fā)(6):邊界填充+Csharp調(diào)用Python matplotlib代碼,C++&Python&Csharp in OpenCV,c++,python,c#

C++

Python跑好了,但是C++和Csharp沒有matplotlib.pyplot這個庫,得去自己手動導(dǎo)入一下

額,我還是放棄了。我把相關(guān)的連接放在這里了,C++的環(huán)境配置實(shí)在是過于麻煩,要修改項目配置,還要修改文件內(nèi)容,還要添加環(huán)境變量。我這里就不做對應(yīng)的配置了。我嘗試配置了一下,沒配置出來

C++調(diào)用matplotlib繪圖總結(jié)

c++調(diào)用matplotlib(一)

Visual Studio配置C++繪圖庫matplotlibcpp的方法


#include <opencv2/opencv.hpp>  
#include <opencv2/core/core.hpp>  
#include <opencv2/highgui/highgui.hpp>  
#include <opencv2/imgproc.hpp>  
#include<iostream>  
using namespace std;
int main()
{
	cv::Mat image = cv::imread("D:/workSpace/OpenCV/HellOpenCV/Resources/image/cat.png");
	auto fill = new int[4] {50, 50, 50, 50};

	//聲明變量
	cv::Mat replicate;
	cv::Mat reflect;
	cv::Mat reflect101;
	cv::Mat wrap;
	cv::Mat constant;

	//運(yùn)行邊界填充

	cv::copyMakeBorder(image, replicate, fill[0], fill[1], fill[2], fill[3], cv::BORDER_REPLICATE);
	cv::copyMakeBorder(image, reflect, fill[0], fill[1], fill[2], fill[3], cv::BORDER_REFLECT);
	cv::copyMakeBorder(image, reflect101, fill[0], fill[1], fill[2], fill[3], cv::BORDER_REFLECT101);
	cv::copyMakeBorder(image, wrap, fill[0], fill[1], fill[2], fill[3], cv::BORDER_WRAP);
	cv::copyMakeBorder(image, constant, fill[0], fill[1], fill[2], fill[3], cv::BORDER_CONSTANT);

	cv::imshow("image", image);
	cv::imshow("replicate", replicate);
	cv::imshow("reflect", reflect);
	cv::imshow("reflect101", reflect101);
	cv::imshow("wrap", wrap);
	cv::imshow("constant", constant);

	cv::waitKey(0);
	cv::destroyAllWindows();
	return 0;
}

C++&Python&C# 三語言O(shè)penCV從零開發(fā)(6):邊界填充+Csharp調(diào)用Python matplotlib代碼,C++&amp;Python&amp;Csharp in OpenCV,c++,python,c#

Csharp

Csharp我倒是跑通了,沒想到Csharp反而是最簡單的了。

PythonNet,Csharp如何白嫖Python生態(tài)和使用Matplotlib

錯誤代碼

 static void Main(string[] args)
 {
     Mat image = Cv2.ImRead("D:/workSpace/OpenCV/HellOpenCV/Resources/image/cat.png");
     (int top, int bottom, int left, int right) fill = (50, 50, 50, 50);

     Mat replicate = new Mat();
     Mat reflect = new Mat();
     Mat reflect101 = new Mat();
     Mat wrap = new Mat();
     Mat constant = new Mat();

     Cv2.CopyMakeBorder(image, replicate, fill.top, fill.bottom, fill.left, fill.right, BorderTypes.Replicate);
     Cv2.CopyMakeBorder(image, reflect, fill.top, fill.bottom, fill.left, fill.right, BorderTypes.Reflect);
     Cv2.CopyMakeBorder(image, reflect101, fill.top, fill.bottom, fill.left, fill.right, BorderTypes.Reflect101);
     Cv2.CopyMakeBorder(image, wrap, fill.top, fill.bottom, fill.left, fill.right, BorderTypes.Wrap);
     Cv2.CopyMakeBorder(image, constant, fill.top, fill.bottom, fill.left, fill.right, BorderTypes.Constant);

     //Cv2.ImShow("name",image);

     //Cv2.WaitKey(0);



     //選擇你Python的dll位置
     Runtime.PythonDLL = @"D:\Anaconda3\python311.dll";
     //創(chuàng)建Python環(huán)境
     PythonEngine.Initialize();

     //展開Python的全局解釋器
     using (Py.GIL())
     {
         dynamic plt = Py.Import("matplotlib.pyplot");

         plt.subplot(231); plt.imshow(image, "gray"); plt.title("image");
 

         plt.show();

         Console.WriteLine("運(yùn)行完畢");
         Console.ReadLine();
     }
 }

C++&Python&C# 三語言O(shè)penCV從零開發(fā)(6):邊界填充+Csharp調(diào)用Python matplotlib代碼,C++&amp;Python&amp;Csharp in OpenCV,c++,python,c#
我們直接用是不可以的,因為他底層的代碼不一樣。matplotlib必須要是數(shù)組形式的數(shù)據(jù)輸入。那我們需要將Mat轉(zhuǎn)化為數(shù)組。

Mat遍歷

Opencv:通過Mat遍歷圖像的5種方法

C++ 高效的遍歷opencv Mat像素

我這里就直接上結(jié)果了

/// <summary>
/// 3通道遍歷
/// </summary>
/// <param name="mat"></param>
/// <returns></returns>
public static int[,,] MatToArray(Mat mat)
{

    var res = new int[mat.Rows, mat.Cols, mat.Channels()];
    for(var i =0 ; i < mat.Rows;i++)
    {

        for(var j = 0 ; j < mat.Cols; j++)
        {
            var temp = mat.At<Vec3b>(i, j);
            res[i,j,0] = temp[0];
            res[i,j,1] = temp[1];
            res[i,j,2] = temp[2];
        }
    }

    return res;
}

最終代碼和結(jié)果

internal class Program
{
    static void Main(string[] args)
    {
        Mat image = Cv2.ImRead("D:/workSpace/OpenCV/HellOpenCV/Resources/image/cat.png");
        (int top, int bottom, int left, int right) fill = (50, 50, 50, 50);

        Mat replicate = new Mat();
        Mat reflect = new Mat();
        Mat reflect101 = new Mat();
        Mat wrap = new Mat();
        Mat constant = new Mat();

        Cv2.CopyMakeBorder(image, replicate, fill.top, fill.bottom, fill.left, fill.right, BorderTypes.Replicate);
        Cv2.CopyMakeBorder(image, reflect, fill.top, fill.bottom, fill.left, fill.right, BorderTypes.Reflect);
        Cv2.CopyMakeBorder(image, reflect101, fill.top, fill.bottom, fill.left, fill.right, BorderTypes.Reflect101);
        Cv2.CopyMakeBorder(image, wrap, fill.top, fill.bottom, fill.left, fill.right, BorderTypes.Wrap);
        Cv2.CopyMakeBorder(image, constant, fill.top, fill.bottom, fill.left, fill.right, BorderTypes.Constant);

        //選擇你Python的dll位置
        Runtime.PythonDLL = @"D:\Anaconda3\python311.dll";
        //創(chuàng)建Python環(huán)境
        PythonEngine.Initialize();


        //展開Python的全局解釋器
        using (Py.GIL())
        {
            dynamic plt = Py.Import("matplotlib.pyplot");

            //轉(zhuǎn)化成3通道數(shù)組
            plt.subplot(231); plt.imshow(MatToArray(image), "gray"); plt.title("image");
            plt.subplot(232); plt.imshow(MatToArray(replicate), "gray"); plt.title("replicate");
            plt.subplot(233); plt.imshow(MatToArray(reflect), "gray"); plt.title("reflect");
            plt.subplot(234); plt.imshow(MatToArray(reflect101), "gray"); plt.title("reflect101");
            plt.subplot(235); plt.imshow(MatToArray(wrap), "gray"); plt.title("wrap");
            plt.subplot(236); plt.imshow(MatToArray(constant), "gray"); plt.title("constant");
            //展示結(jié)果
            plt.show();

            Console.WriteLine("運(yùn)行完畢");
            Console.ReadLine();
        }
    }

    /// <summary>
    /// 3通道遍歷
    /// </summary>
    /// <param name="mat"></param>
    /// <returns></returns>
    public static int[,,] MatToArray(Mat mat)
    {

        var res = new int[mat.Rows, mat.Cols, mat.Channels()];
        for(var i =0 ; i < mat.Rows;i++)
        {

            for(var j = 0 ; j < mat.Cols; j++)
            {
                var temp = mat.At<Vec3b>(i, j);
                res[i,j,0] = temp[0];
                res[i,j,1] = temp[1];
                res[i,j,2] = temp[2];
            }
        }

        return res;
    }
}

C++&Python&C# 三語言O(shè)penCV從零開發(fā)(6):邊界填充+Csharp調(diào)用Python matplotlib代碼,C++&amp;Python&amp;Csharp in OpenCV,c++,python,c#

C++&Python&C# 三語言O(shè)penCV從零開發(fā)(6):邊界填充+Csharp調(diào)用Python matplotlib代碼,C++&amp;Python&amp;Csharp in OpenCV,c++,python,c#

總結(jié)

今天不僅了解了一下這個代碼,還順便了解了一下Csharp怎么代用Python的matplotlib。C++ 沒配成功,看網(wǎng)上的代碼太麻煩了,而且我也不用C++ 作為開發(fā)軟件,只是單純的稍微了解一下。文章來源地址http://www.zghlxwxcb.cn/news/detail-818485.html

到了這里,關(guān)于C++&Python&C# 三語言O(shè)penCV從零開發(fā)(6):邊界填充+Csharp調(diào)用Python matplotlib代碼的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(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)擊違法舉報進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

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

相關(guān)文章

  • C++&Python&C# 三語言O(shè)penCV從零開發(fā)(5):ROI截取

    C++&Python&C# 三語言O(shè)penCV從零開發(fā)(5):ROI截取

    C++PythonCsharp in OpenCV 專欄 【2022B站最好的OpenCV課程推薦】OpenCV從入門到實(shí)戰(zhàn) 全套課程(附帶課程課件資料+課件筆記) ROI,本意是感興趣區(qū)域。但是使用起來就和PS的截取部分區(qū)域差不多。 我之前寫過一篇Python 的代碼 Python+OpenCV 零基礎(chǔ)學(xué)習(xí)筆記(6):ROI 其它的相關(guān)文章 OpenCV之感

    2024年01月25日
    瀏覽(53)
  • C++&Python&C# 三語言O(shè)penCV從零開發(fā)(4):視頻流讀取

    C++&Python&C# 三語言O(shè)penCV從零開發(fā)(4):視頻流讀取

    C++PythonCsharp in OpenCV 專欄 【2022B站最好的OpenCV課程推薦】OpenCV從入門到實(shí)戰(zhàn) 全套課程(附帶課程課件資料+課件筆記) OpenCV 教程中文文檔|OpenCV中文 OpenCV教程中文文檔|W3Cschool OpenCV基礎(chǔ)教程——視頻的讀取與寫入(超詳細(xì)+附代碼) 我之前寫過一篇基于Python的,我現(xiàn)在重新寫一次

    2024年01月21日
    瀏覽(119)
  • C++&Python&C# 三語言O(shè)penCV從零開發(fā)(3):圖像讀取和顯示

    C++&Python&C# 三語言O(shè)penCV從零開發(fā)(3):圖像讀取和顯示

    C++PythonCsharp in OpenCV 專欄 【2022B站最好的OpenCV課程推薦】OpenCV從入門到實(shí)戰(zhàn) 全套課程(附帶課程課件資料+課件筆記) OpenCV4 C++ 快速入門視頻30講 - 系列合集 OpenCV4 C++ 課程筆記 在上一章糾結(jié)過教程的選擇之后,還是覺得老老實(shí)實(shí)從零開始學(xué)OpenCV,從OpenCV C++視頻教程開始。 這

    2024年01月21日
    瀏覽(46)
  • 計算機(jī)圖形學(xué)06:中點(diǎn)Bresenham畫圓(并填充邊界,例如:邊界用紅色,內(nèi)部用綠色填充)

    計算機(jī)圖形學(xué)06:中點(diǎn)Bresenham畫圓(并填充邊界,例如:邊界用紅色,內(nèi)部用綠色填充)

    作者 :非妃是公主 專欄 :《計算機(jī)圖形學(xué)》 博客地址 :https://blog.csdn.net/myf_666 個性簽:順境不惰,逆境不餒,以心制境,萬事可成?!鴩?專欄名稱 專欄地址 軟件工程 專欄——軟件工程 計算機(jī)圖形學(xué) 專欄——計算機(jī)圖形學(xué) 操作系統(tǒng) 專欄——操作系統(tǒng) 軟件測試 專

    2024年01月24日
    瀏覽(20)
  • 八、計算機(jī)視覺-邊界填充

    八、計算機(jī)視覺-邊界填充

    在Python中使用OpenCV進(jìn)行邊界填充(也稱為zero padding)是一種常見的圖像處理操作,通常用于在圖像周圍添加額外的像素以便進(jìn)行卷積或其他操作。下面是使用OpenCV進(jìn)行邊界填充的基本原理和方法 邊界填充的原理是在圖像的周圍添加一圈像素,這些像素的值通常設(shè)置為0,因此

    2024年02月19日
    瀏覽(19)
  • python opencv實(shí)現(xiàn)找到圖像的輪廓,填充顏色

    python opencv實(shí)現(xiàn)找到圖像的輪廓,填充顏色

    我想找到圖片中的閉合圈,然后填充顏色 所需要的cv函數(shù): 1。 OpenCV提供的findContours()方法可以通過計算圖像梯度來判斷出圖像的邊緣,然后將邊緣的點(diǎn)封裝成數(shù)組返回。 ? ?image : 為檢測的圖像,必須是8位單通道二值圖像。如果原圖為彩色的,必須轉(zhuǎn)為灰度圖,并通過二值

    2024年02月04日
    瀏覽(24)
  • OpenCV-Python學(xué)習(xí)(13)—— OpenCV 多邊形填充與繪制(cv.fillPoly、cv.polylines)

    OpenCV-Python學(xué)習(xí)(13)—— OpenCV 多邊形填充與繪制(cv.fillPoly、cv.polylines)

    1. 知識點(diǎn) 學(xué)習(xí) cv.polylines 函數(shù)的使用; 學(xué)習(xí) cv.fillPoly 函數(shù)的使用。 2. 繪制折線或多邊形 cv.polylines 函數(shù)說明 2.1 函數(shù)使用 2.2 參數(shù)說明 參數(shù) 說明 img 表示要在其上繪制矩形的圖像的img對象。 pts 表示一個或多個點(diǎn)集。 isClosed 表示標(biāo)志,決定所繪制的多邊形是否閉合。若為 T

    2024年02月16日
    瀏覽(95)
  • OpenCV函數(shù)應(yīng)用:基于二值圖像的三種孔洞填充方法記錄(附python,C++代碼)

    OpenCV函數(shù)應(yīng)用:基于二值圖像的三種孔洞填充方法記錄(附python,C++代碼)

    函數(shù)系列: OpenCV函數(shù)簡記_第一章數(shù)字圖像的基本概念(鄰域,連通,色彩空間) OpenCV函數(shù)簡記_第二章數(shù)字圖像的基本操作(圖像讀寫,圖像像素獲取,圖像ROI獲取,圖像混合,圖形繪制) OpenCV函數(shù)簡記_第三章數(shù)字圖像的濾波處理(方框,均值,高斯,中值和雙邊濾波) OpenC

    2024年02月05日
    瀏覽(30)
  • C# &OpenCV 從零開發(fā)(0):前言

    C# &OpenCV 從零開發(fā)(0):前言

    由于我想換個機(jī)器視覺+運(yùn)動控制的工作,我就開始了自學(xué)機(jī)器視覺方向的技術(shù)。但是Halcon畢竟是商業(yè)化的庫,國內(nèi)用盜版還是怕被告。所以期望使用OpenCV。 OpenCV目前已知的方法的有兩個版本 Python:用起來挺簡單的,就是Python的語言不適合管理,感覺以后必定會出現(xiàn)問題,不適

    2024年01月18日
    瀏覽(63)
  • 【30天python從零到一】---第六天:函數(shù)、變量作用域、函數(shù)的鏈?zhǔn)秸{(diào)用和遞歸調(diào)用

    【30天python從零到一】---第六天:函數(shù)、變量作用域、函數(shù)的鏈?zhǔn)秸{(diào)用和遞歸調(diào)用

    ?? 博客主頁:??@披星戴月的賈維斯 ?? 歡迎關(guān)注:??點(diǎn)贊??收藏??留言 ??系列專欄:?? Python專欄 ??請不要相信勝利就像山坡上的蒲公英一樣唾手可得,但是請相信,世界上總有一些美好值得我們?nèi)σ愿?,哪怕粉身碎骨?? ??一起加油,去追尋、去成為更好的自己

    2023年04月14日
    瀏覽(23)

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

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

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

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

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包