文件名称:
jsxyhelu博客集锦20190503.pdf
开发工具:
文件大小: 18mb
下载次数: 0
上传时间: 2019-09-03
详细说明:一、集合OpenCV 的视频功能和QCamera 的摄像头接口,开发出易于理解的、结
构简单的摄像头控制和采集框架。
二、为基于OpenCV 的图像处理程序编写界面—关于QT\MFC\CSharp 的选择以及GOCW 的介绍
三、Windows 环境下最新OpenCV 和Contribute 代码的联合编译
四、基于opencv 和mfc 的摄像头采集代码
五、答题卡图像识别项目
六、OpenCV 自带dnn 的Example 研究(1)—classification摄像头的打开也非常直接
aeo Mainwindow
摄像头设备 Rxsx video
打开图片
算法
关闭摄燥头
拍照
打开摄像头
全屏
退出
添加了一些修改,使用QT来做,真的是非常方便
U
eL是be
LEtaba
头级备限被beFE
打片
打开僧头
翻全出
项目地址:https://github.com/isxyhelu/GOQTTemplate3
为基于0pen0的图像处理程序编写界面一关于
QTMFC\ CSharp的选择以及G0W的介绍
第一第2项日
基于0 pencv编写图像处理项目,除了算法以外,比较重要一个问题就是界
面设计问题。对于c艹语系的程序员来说,一般来说有QT/MFC两种考虑。QT的确
功能强大,特别是QM编写 android界面很有一套
(https://www.cnblogs.com/isxyhelu/p/8286476.htm1)在树莓派上进行设
计也很方便(https://www.cnblogs.com/isxvhelu/p/7839062.htm1)但是使
用QT的一个现实问题就是和现有平台的结合,比如客户需要将结果导出到 excel
中,使用qT就比较别扭(当然不是说不可以)。所以现在我一般这样来做:对
于 Android和PI,或者需要在 Linux上运行的项目,使用QT编写界面,调用
0 pencv函数;对于需要在 windows上运行的项目,使用ⅦFC编写界面,直接就可
以引用 OpenCv。
冇人会吐榑MFC使用起来非常麻烦,这点我非常同意。但MFC经过这么多年
的发展,今日仍有活力,并且短时间内不会消失。因为相比较其他一些所见即
所得的语言和环境来说(QI/ Csharp),llc的消息映射机制和坐标体系等,的确
有它的优势,对于图像处理程序来说尤其如此:加以积累,能够快速做岀很多
专业的东西;近期出现的 ribbon界面也为mfc加分不少
(https://www.cnblogs.com/isxyhelu/p/9209052.htm1)
选择了MFC这个方向,思考图像处理程序问题,一般来说分为“处理图像”
和″处理视频"两类:对于图像处理来说,我提供的 GOPaint框架
https://www.cnblogs.com/jsxyhelu/p/6440910.htm1)能够提供一个基本的
静态图像处理框架;而 GOMFCTemplate2
(https://www.cnblogs.com/isxyhelu/p/gomfctemplate2.html)则适合用来
处理视频。这两种都分别成功运用于多种视频处理项目中。
但是这里我想更进一步:希望能够用 Csharp编写界面,因为它更好用:但
是又不想引入 Emgucv类似的库,因为里面很多东西不是我需要的。那么最直接
的方法就是使用 Csharp调用基于0 pencv编写的类库文件(D11)的,我取名叫做
GreenOpenCsharp Warper(GOCW)
经过比较长时间的探索研究,目前的GOCW已经可以直接以函数的形式在内
存中传递 bitmap和Mat对象,达到了函数级别的应用。因为这里涉及到托管代码
编写,也就是CLR程序编写,所以有比较复杂的地方;为了展现GOCW的优良特
性,我编写实现G0GPY项目,也就是一个" Csharp编写界面, Opencv实现算法的
实时视频处理程序”,相关细节都包含其中。之所以叫“GPY”,是采集硬件这
块,我釆用了成像质量铰好的高拍仪设备( GaoPaiyi)。
工加转
-·
视端转:
口白动
图像存放位置
要存信设
矫正方式
白动正O正
色友廛日
设置
这里简单将最核心内容进行讲解。GOCW的核心问题,无非就是基于CLR之上
的两个方向的数据流转换。核心函数为
B-tmap GoClrclass:: testMethod(cli:: array" pCBufl
pin ptr pl=&pCBufl[o]
unsigned char* phyl=pl
Cv:: Mat img datal (pcBufl->Length l, Cv U, pby1
cv:: Mat img ob-cct-cw: imdccodc( img data-, IMREAD UNCHANGED);//获得数据到
img object中去
//////////////!/////处理过程
cvtColor(img object, img cbject, 40)
Bitmap bb= MatToB-tmap(img object
i£
return nullptr
std:: vector buf
Cv:: -menccde(. ipg", imc object, buf)i
return bb
以及
System:: Drawing:: Bitmap MatToBtmap(const cv:: Mats i mg)
if (mg type()!=Cv 8UC3)
throw gcnew Not SupportedException("Only images of type Cv 8UC3 are
supported for convcrsion to Bitmap)
//create the bitmap and get the pointer to the data
Pixe-Format fmt(Pixelformat:: format24bppRgb)i
Bitmap bmping gcnew Bitmap(img. cols, img. rows, fmt)
BitmapData data bmpimg->LockBits (System:: Drawing:: Rectangle(0, 0,
irmg ccls, imc rows), ImageLockMode: Writeonly, fmt)i
reinterpret cast(data->ScanO. ToPointer())i
Byte *dstData reinterpret cast(data->5can0. ToPointer())i
nsigned char *srcData
dat
for (int
w< data->Height; ++row)
mcmcpy(reinterpret cast(&dstData frow kdata->Stridc1)
reinterpret cast(&srcData [row*img. stepl), img. cols*img. charnels())
return bmpimg;
而在
中,直接
Bitmap b= new B=tmap(cam Width, cam. Height, cam Stride,
P-xclFormmat. E'crmat2 4bppRgb
/If the image is upsidedown
b. RotateFlip(RotateElipType. RotateNoneFlipY)
src⊥maqe
f (pi
调用c1r+ opencv图像处理模块
Memorystream ms new Memorystream(
gIng
B-tinap b_tmap client tes tMethod (bytes)
就可以调用,并且获得结果
以下内容为2017年更新的内容,适当参考
一、CLR编写的DLL部分
1、按照正常方法引入Ope
2、提供接口函数,进行图像处理(这里只是实现了 cvtColor,实际过程
中可以用自己编写的复杂函数
String Classl:: Mcthod(cli: : array pCBufl)
pin ptr pl=&pCBufl[oli
unsigned char* pby
cv:: Mat img datal(pCBufl->Length, l, Cv BU, pbl)i
v:: Mat img object cv:: inmdecode(img datal, IMREAD UNCHANGED);
11/111111处理过程/////
cvtColor(img object, img object, 40)i
////1/1111y/y///1//1
////
if (img object data)
return nullptri
//获得日录,保存文件
return "c:/Methcd, pg", u
cv:: imwrite
pg",img object)
String Classl:: Method2(cli: :array pCBufl)
Byte> pl
BELlO
nsigned chart pby1 p1
cv:: Mat img datal (pCBufl->Length,l, Cv BU, pbyl
Cv:: Mat img obiect cv:: imdecode(img data, IMREAD UNCHANGED)i
/1////////////处理过程///////////////////
evtColor(img object, img cbject, 6)
if ( img chject data)
return nullptr
//获得目录,保存文件
return "c: / Method2. jpg"i
二、 Winform调用接口部分(TIP:不仪可以用 Winford调用,
asp.net/ webservice都是可以调用的)
1、直接引用 clr dll
C# Windows Forms Applicat
少pi
perthes
司引用
Classlib
■ Microsoft Sharp
ystem
2、编写 helper文件(应该也可以叫做 warpper),通过外部IO的方法获取
clrd11的文件
class GoCsharpllelper
Classl c ient new Class1():
string strResultl = nul
string strResult2
//输入参数是 string或 b=tmap
public Bitmap ImmageProccss(string ImagcPath
Image InmageTemp Bitmap FromFile(ImagePath)i
return ImagcProccss(lmagcT'cmp)i
//输出结果是 bitmap
public B-tmap ImageProcess(Image image)
Memorystream ms new Memorystream(
mage. save(ms, System. Drawing. Imag-ng. ImageFormat Jpeg)i
byte
ms. GetBuffer(
lt1 client Methcd(bytes)i
Tmage TmageResult=Bitmap. From=ile(strResult1)i
eturn (Bitmap)ImageResult
olic B:tmap ImageProcess2(string ImagePath)
Image ImageTemp B-tmap. FromFile(-magepath
return ImageProcess2(ImageTemp)
//输出结果是 bitmap
ublic B=tmap ImageProcess2(Il
Memorystream ms new Memorystream()i
image save(ms, System. Drawing. Imag-ng. ImageFormat upec)i
byte. bytes = ms. GetBuffer(
strResult2= client. Metrcd2(bytes)i
Tmage TmageResult= Bitmap. From=ile(strResult7)i
return (Bitmap)ImageResult
public void Clear(
File Delete(
3、使用例子(注意控件的 di spose)
private void buttcn2 Click(object sender, EventArgs e)
if (pictureBoxl Image ! null
pictureBoxl. Image Dispose()
(pictureBox
ictureBOx2. Image Dispose()i
Image imagel yocsharphelper. ImageProcess(
E:/sandbox/logo. jpg")i
piC七 ureBox1.二mage= Imade1
Image image2
gocsarphelper. Immageprocess2(E: /sandbox/lena. jpg");
pictureBox.-mage =-mage2
三、解释说明
使用外部I/0不仅仅是权宜之计,实际上 Opencv的 Decode使用的就是外
部I/0。就目前研究的水平来说,这是最稳定的。
目前搭建成功的框架匚经能够完成“ csharp调用 opencv的”目标,并且在调
试、参数传递方面都很强
如果是处理静态图片,已经够用。
四、杀手程序
GOImageResearch
使用这种方法编写的图像处理预分析程序
的小207
文件出gR
(系统自动生成,下载前可以参看下载内容)
下载文件列表
相关说明
- 本站资源为会员上传分享交流与学习,如有侵犯您的权益,请联系我们删除.
- 本站是交换下载平台,提供交流渠道,下载内容来自于网络,除下载问题外,其它问题请自行百度。
- 本站已设置防盗链,请勿用迅雷、QQ旋风等多线程下载软件下载资源,下载后用WinRAR最新版进行解压.
- 如果您发现内容无法下载,请稍后再次尝试;或者到消费记录里找到下载记录反馈给我们.
- 下载后发现下载的内容跟说明不相乎,请到消费记录里找到下载记录反馈给我们,经确认后退回积分.
- 如下载前有疑问,可以通过点击"提供者"的名字,查看对方的联系方式,联系对方咨询.