继承opencv的CImage类在MFC的单文档中编辑并显示图像

基于OpenCV与MFC单文档的图像处理软件 [2]图像的显示 我们知道,OpenCV可以通过imread()和imshow()函数将读取到的图片显示到windows创建的窗口中,但如果我们要将其显示在MFC应用界面内,还需要做一些别的转换。网上的许多资料都是基于OpenCV的CvvImage类,但新版本的OpenCV中已经取消了该类,当然我们也可以添加该类对应.h和.cpp文件中到自己的工程中,但这里我介绍的是另外一种更为直接的方法:通过OpenCV的Mat... 阅读详情

摘自:http://wenku.baidu.com/view/fc943c41a8956bec0975e374.html

在opencv中显示一个图像简单,但是想在MFC的单文档框架中可不是件容易的,好在opencv提供了CImage类可以简化这一工作,但是还是碰到了些问题,

如如何装IplImage*图像放入CImage类的成员变量中.
CImage
类封装了图像打开\保存\获取\等方法,并将图像保存在一个protected的图像成员变量里.虽然也提供了CopeOf来装入图像,但是由于

类型转换的问题,总是出错.
解决方法:以CImage为基类自定义一个类:
1.
从论坛上看到一哥们使用的方法是在自定义的类的构造函数中修改CImage的protected的图像成员变量,如下:
myimg::myimg(IplImage* img) : CvvImage()
{
m_img=cvCloneImage(img);
}

调试时发现无法在MFC的xxxxDoc.h中定义新类myimg的对像,错误是构造函数不正确,也可能是自己MFC水平太差^_^(请大家提意见).
2.
自己的解决办法是,以CImage为基类自定义一个类如下:

//class声明文件
#include "stdafx.h"
#include "mcv_common.h" //
其中是opencv的一些头文件

class myimg :public CvvImage
{

public:
myimg();
mSetImg(IplImage* pImg);
};

//class实现文件
#include "stdafx.h"
#include "mcv_common.h" //
其中是opencv的一些头文件
#include "mCImage.h"
myimg::myimg()
{
}

myimg::mSetImg(IplImage* pImg)
{
m_img=cvCloneImage(pImg); //
这句很关键 ,调试也曾换成CImage类中的CopeOf方法,但是总有类型转换错误
}


//
测试代码
//
打开文件
BOOL CMcv_image_sdiDoc::OnOpenDocument(LPCTSTR lpszPathName)
{
if (!CDocument::OnOpenDocument(lpszPathName))
return FALSE;

m_imgBackup=cvLoadImage(lpszPathName,0);
mcv_image.mSetImg(m_imgBackup);

return TRUE;
}

//图像处理:这里以灰度拉伸为例
void CMcv_image_sdiView::OnPointStre()
{
CMcv_image_sdiDoc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
IplImage* pImgTemp=pDoc ->mcv_image.GetImage();

pImgTemp=GrayStretch(pImgTemp, pImgTemp->width,pImgTemp->height, bX1,bY1, bX2, bY2);//
此处是自定义函数,可以换成其他处理

pDoc ->mcv_image.mSetImg(pImgTemp); //
主要是部分:将处理后和图像写入CImage中的m_img

//非常关键的部分
UpdateData(FALSE); //
更新
CRect m_MouseRect;
GetClientRect (&m_MouseRect);
InvalidateRect(m_MouseRect, TRUE);//
重绘

}

//显示部分
void CMcv_image_sdiView::OnDraw(CDC* pDC)
{
CMcv_image_sdiDoc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
myimg & c_myimg = pDoc ->mcv_image; //mcv_image->m_image
CRect m_rect;

m_rect.SetRect(0,0,c_myimg.Width(),c_myimg.Height());
c_myimg.DrawToHDC(pDC->GetSafeHdc() ,m_rect);

}

PS:Mcv_image_sdi 为工程名 , 是一个单文档工程
虽然不大一个问题 , 但是还是费了半天劲 , 和大家分享 , 希望多提意见 , 共同学习
VS2017配置opencv3.2在MFC单文档中显示图片 最近微软发布了VS2017,增加了很多更实用的功能,其中让笔者兴奋不已的GPU加速功能。只需要切换一个按键便能享受GPU的加速,让程序的速度几何倍数的加快。 可是vs2017比较刚刚发布很多的第三方库和第三方的工具都没有更新过来。其中包括笔者在标题上提到的Opencv3.2以及笔者以前一直使用的C++第三方GUI库QT。可是笔者着实不想放弃这令人着迷的VS2017。于是千方百计,到处翻资料终于在 阅读详情

相关推荐

MFC实现RTSP拉流,实时显示视频流(附完整源码)

MFC实现RTSP拉流,实时显示视频流(附完整源码)

希望我的博客,能帮上你解决学习中工作中所遇到的问题 903

基于MFC单文档下调用opencv库并将图片效果显示在单文档窗口

对比于网络上的MFC对话框显示图像处理的效果,按下控件就会有对话框的弹出,为此为了美观和方便,便制作了基于单文档调用opencv库的方式,并使图片处理效果一直悬浮在单文档的窗口中。 opencv库对于二维图像处理有着极大的方便,此篇博客主要是为了实现opencv库与MFC单文档的较为完整的配合。      在新的单文档中用opencv显示图像,主要用到了cvvImage类,cvvImage类包装

llx18850576021的博客 3859

在MFC应用中显示OpenCV的Mat类型图像

在MFC应用程序中,自定义控件是一种常见且非常有效的方式,以实现特定的用户界面和交互。类的设计旨在提供一个图形用户界面组件,该组件能够处理和显示图像数据,特别是通过OpenCV加载的Mat类型图像。设计此类将允许我们在MFC应用程序中轻松集成图像处理和显示功能。功能上,类提供了图像的加载、显示、更新以及响应用户输入事件的能力。它抽象了与图像显示相关的所有操作,使得开发者能够专注于图像处理算法的实现,而不需要过多关注图像渲染的细节。

weixin_34581040的博客 1071

MFC+Opencv在单文档程序中显示出一幅图像

在MFC中显示一幅图像程序是十分复杂的,而在Opencv中读入一幅图像只需要一句话,而且很多的图像处理操作都需要使用Opencv中已有的函数,所以在MFC中调用Opencv的函数显示一幅图像是很必要的操作。现在网上很多相关的描述都很不详尽,我总结并编写程序测试后,依次介绍在对话框程序和单文档程序中显示一幅图像。(假设在VS平台上已经按照要求配置好Opencv) 1、  新建一个单文档程序Read

kuaiyangliukuai的博客 3643

在MFC应用程序中集成OpenCV显示图像的完整教程

CImage类是MFC(Microsoft Foundation Classes)提供的一个封装类,用于处理图像数据。它提供了方便的接口来创建、操作和显示图像。相比之下,OpenCV的Mat对象是用于图像处理的一个更为灵活的数据结构,它支持更广泛的图像操作,并且与C++标准库兼容性良好。CImage和Mat在内部存储数据的方式有所不同,CImage通常使用一个连续的内存块存储图像数据,而Mat可以由多个小块内存组成。CImage vs Mat对象比较| 特性 | CImage | Mat |

weixin_35950531的博客 729

综合图像处理课程设计与MFC及OpenCV应用

本文还有配套的精品资源,点击获取 简介:本课程设计将介绍如何使用MFC(Microsoft Foundation Classes)结合OpenCV库进行图像处理。将涵盖MFC的基本界面开发和图像显示技术,并深入探讨OpenCV提供的各类图像处理算法,如滤波、边缘检测、特征提取和物体识别等。学生将通过实现图像加载、显示、处理和用户交互功能,掌握在Windows环境下开发图像处...

weixin_42608299的博客 934

MFC单文档中图像的显示与操作

一、创建MFC单文档工程:DIPAX 二、在DIPAX工程添加CDib类的定义及其实现。 三、在DIPAX工程MFC单文档中创建两个视图类,左右分开 1、首先创建类: class CDynSplitterWnd :public CSplitterWnd { public: CDynSplitterWnd(void); ~CDynSplitterWnd(void); }; 在C

爱看恐怖片的博客 6910

在MFC中使用OpenCV实现打开保存图片

在MFC中使用OpenCV 实现打开图片显示、保存图片功能 注意 本程序为VC6.0下 基于OpenCV1.0的程序 使用前先确保Opencv1.0在VC6.0的安装和配置正确 添加的代码在View类和Doc类里

继承opencv的CImage类在MFC的单文档中编辑并显示图像的方法

/*2009 04 17 周五 */在opencv中显示一个图像简单,但是想在MFC的单文档框架中可不是件容易的,好在opencv提供了CImage类可以简化这一工作,但是还是碰到了些问题,如如何装IplImage*图像放入CImage类的成员变量中. CImage类封装了图像打开/保存/获取/等方法,并将图像保存在一个protected的图像成员变量里.虽然也提供了CopeOf来装入图像,但

十年通信老兵的技术修炼之路——从3G到5G,从地面基站到卫星通信。 4218

利用opencv和MFC单文档加载图像

利用opencv在MFC单文档中加载图像,加载图像的效果会因图像大小与屏幕分辨率大小的关系而不同。本代码中包含两个代码,三种不同方法。适合新手入门,同时希望高手加以指导。具体效果需要使用小图像和大图像(例如4000*3000)。opencv版本2.4.10 。学习总结,望高手指点。

MFC 单文档 显示图像 opencv vs2010

MFC 单文档 显示图像 opencv vs2010

vc中使用opencv

opencv文档大多使用自带的GUI,由于开发需要,很多程序还得使用vc来做。 创建单文档mfc项目,命名为vcshow,项目将库目录和lib设置好,连接器输入项配置好opencv附加项。具体配置前面的博客有。 CImage 类是微软提供的图像处理和绘图类,在JPEG、GIF、BMP和可移植网络映像(PNG)格式提供增强的位图支持,包括能够加载和保存图像。 CImage 采用设备无关位图(D

漫先绅的专栏 1458

VC6.0+OpenCV1.0配置下的MFC单文档完整工程(适合入门学习)

VC6.0+OpenCV1.0配置下的MFC单文档完整工程,能够实现图像的打开、显示、保存,并实现CANNY边缘算子的计算和显示。适合入门学习VC6.0+OpenCV1.0配置下的MFC界面的设计。学会了这个基本工程,基本上就懂怎么做MFC界面了。

MFC OPENCV 加载与保存图片

项目当然需要MFC与OPENCV结合,加载图像原来用的是cIimge,这个类在opencv2.0以后就没有,没有当然有它的原因,因为在vs2010中已经继承了cImage了,所以我们最好还是用vs2010里面的吧,我是参考这篇文章的,很好,建议大家使用。而且原来用opencv 的CImage,我不知道怎样即将cimage传递给IPLimage。http://www.cnblogs.com/spee

1613

opencv2.4.6+win7(32)+vs2010,mfc单文档程序实现基本的MAT格式读取显示功能

学习opencv最初做的小程序,基于MFC单文档类型,可以加载opencv自带的头文件、库文件,实现基本读取、显示功能,,供新手入门,老鸟勿喷

Coze平台智能体开发实战:打造测试工程师的AI助手

智能体是具备特定身份和能力的AI实体,由大语言模型(LLM)驱动,并通过插件、知识库和工作流扩展其能力。明确的角色定位:可以设定特定身份和专业领域扩展能力:通过插件连接外部工具和服务记忆能力:通过知识库存储和检索专属信息流程化处理:通过工作流执行复杂多步任务通过Coze平台创建测试工程师智能体,可以显著提升测试效率和质量。明确的角色定位:聚焦测试工程师的实际需求丰富的知识库:提供准确的领域知识支持合适的工具集成:通过插件连接现有工具链持续迭代优化:根据反馈不断改进智能体行为自动化测试生成。

hogwarts_beibei的博客 1005

如何在MFCview视图下显示opencv Mat矩阵图像

在这里我主要介绍两种关于如何在MFCview视图下显示opencv Mat矩阵图像方法 方法一:基于MFC和ATL共享的新类CImage的方法。 方法二:基于GDI+绘图的方法。

我是小立的博客 2590

在树莓派5(8G版)上运行Ollama + LLM

直接上结论,Ollama在树莓派上能安装,且本身运行起来毫无压力,但具体到大语言模型,Deepseek似乎不总是最佳选择。

ki1381的专栏 1651

视觉拖拽软件平台:使用C++/opencv/MFC/自研算法

这个项目萌芽于2021年,期间在主职工作的空闲时间陆陆续续做了一些开发,包括软件框架平台和算法,这里做一下总结。

DATA_3的博客 3628

OpenCv案例(七): 基于OpenCvSharp计算图像的清晰度(自动对焦)

自动对焦,其实是对相机成像的清晰值得计算,若对焦不清晰,成像的清晰度低,视觉效果模糊。若是在工业检测行业,对焦不准确,可能会造成严重后果;对焦准确的图像,其清晰度高,对比度鲜明,层次明显。

qq_37835727的博客 7114

40、5G NR射频要求解析

本文详细解析了5G NR射频相关要求,包括参考灵敏度与动态范围的定义、接收机对干扰信号的抗扰性要求(如阻塞、邻道选择性等)、辐射射频要求在FR1和FR2频段的差异,以及多标准无线电基站(MSR)的发展及其对射频要求的影响。内容涵盖测试模型、干扰场景、具体指标和实现挑战,为理解和应用5G NR射频规范提供了全面指导。

qsc901234的博客 245

vs2010 + opencv保存图像模块

项目当然需要MFC与OPENCV结合,加载图像原来用的是cIimge,这个类在opencv2.0以后就没有,没有当然有它的原因,因为在vs2010中已经继承了cImage了,所以我们最好还是用vs2010里面的吧,我是参考这篇文章的,很好,建议大家使用。而且原来用opencv 的CImage,我不知道怎样即将cimage传递给IPLimage。 这个网址是日志的第三篇,当然第二篇也要好好

dearm23的博客 1427

28、基于图像快速序列视觉呈现(RSVP)的脑机接口特征提取与分类算法综述

本文综述了基于图像快速序列视觉呈现(RSVP)的脑机接口(BCI)中的特征提取与分类算法。RSVP技术通过快速连续呈现图像序列,结合脑电图(EEG)信号分析,实现对目标图像的识别和标记。文章详细介绍了RSVP实验的设计、EEG数据的采集与预处理,并探讨了低信噪比、维度灾难、重叠epoch和不平衡数据集等挑战。针对特征提取,讨论了有监督空间滤波方法(如CSP、xDAWN、LDA波束形成器)的原理和应用。在分类策略部分,涵盖了线性分类技术(如LDA、BLR、LR、SVM)和非线性分类方法(如MLP、CNN)。文

hh234的博客 337
上一篇: 设计模式 观察者模式 C++实现
下一篇: OpenGL加载BMP纹理图片
swping
博客等级 码龄20年 10粉丝 8原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值