58、Visualstudio2019+C#传递Mat数据给C++动态包处理,并
将处理结果。。。
基本思想:使⽤c#调⽤c++的动态包,进⾏图像帧传⼊和处理,然后返回结果;这样就可以独⽴的写c++算法,使⽤c#进⾏前端界⾯和布局开发了
⼀、创建C#⼯程
然后简单测试⼀下⼯程
⼆、在C#中先把OpenCV调⽤起来
(1)在C#中打开搜索NuGet(库程序包管理器)
安装最新的OpenCVSharp4和OpenCVSharp4。runtime.win两个包
修改⼀下⼯程类型,选择X64,若没有在“配置管理器”中,新建⼀个x64平台即可
然后测试⼀下,C#可以正常读取图⽚和显⽰图⽚
测试图⽚代码
using System;
using OpenCvSharp;
namespace ConsoleAppDemo
{
class Program
{
static void Main(string[] args)
{
Mat source = new Mat(@"G:\\1.jpg", ImreadModes.Color);
Cv2.Resize(source, source, new OpenCvSharp.Size(480, 480), 0);
Cv2.ImShow("Demo", source);
Console.WriteLine("show image");
Cv2.WaitKey(0);
}
write的返回值}
}
测试视频
using System;
using OpenCvSharp;
namespace ConsoleAppDemo
{
class Program
{
static void Main(string[] args)
{
VideoCapture cap = new VideoCapture("G:\\1.avi");
VideoWriter writer = new VideoWriter("G:\\save.avi", FourCC.DIVX, 20, new Size(cap.FrameWidth, cap.FrameHeight));
if (!cap.IsOpened())
{
Console.WriteLine("Open video failed!");
return;
}
Mat frame=new Mat();
while(true)
{
cap.Read(frame);
if (frame.Empty() )
break;
writer.Write(frame);
Cv2.ImShow("Demo", frame);
Cv2.WaitKey(1);
}
Console.WriteLine("show image");
}
}
}
三、打包⼀个c++静态包,对C#传过来的帧进⾏灰度处理并返回给C#保存
(1) 使⽤Visual Studio2019 配置opencv⼯程在这,就不具体叙述了,只贴⼀下创建⼯程的属性"空项⽬",没必要创建动态库类型的⼯程
main.cpp
#include "processImage.h"
int main()
{
cv::Mat img = cv::imread("G:\\1.jpg");
cv::Mat result;
cv::resize(img, img, cv::Size(480, 720));
int ok= bitwiseImage(img,result);
cv::imshow("demo",result);
cv::waitKey(0);
return 0;
}
processImage.h
#include<iostream>
#include <opencv2/imgproc/imgproc.hpp>
#include <opencv2/highgui.hpp>
int bitwiseImage(cv::Mat img, cv::Mat& result);
processImage.cpp
#include "processImage.h"
int bitwiseImage(cv::Mat img, cv::Mat &result)
{
cv::Mat ws, ls, CV_8UC3, cv::Scalar(255, 255, 255)); cv::bitwise_xor(img, mask, result);
return 0;
}
测试⼀下, 没问题

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。