opencv2.2以上不支持CvvImage的解决办法

OpenCV2.3.0+VS2010:找不到“opencv_ffmpeg230d.lib ”或者无法打开“CvvImage.h”文件的解决办法 突然有一种感觉,一个人安静地坐下来写代码感觉还是挺不错的。在调试的过程中遇到了N多问题,但是成功解决问题后的喜悦感是无法形容的。           我把在项目中遇到的两个问题在这里解释一下: 问题一:            问题二:          无法打开“CvvImage.h”文件(在错误列表中会有很多错误提示,只要把这个错误解决了,其他的错误提示也就没有了) 阅读详情

在vs10中搭配好了opencv2.3后,跑了一段程序还是出错,原来是因为opencv2.2以上去掉了CvvImage这个类

在网上找到了这个解决办法:

从原来2.1版本里面将CvvImage单独提取出来做一个新类

CvvImage.h

#pragma once

#ifndef CVVIMAGE_CLASS_DEF
#define CVVIMAGE_CLASS_DEF

#include "opencv.hpp"

/* CvvImage class definition */
class  CvvImage
{
public:
   CvvImage();
   virtual ~CvvImage();

   /* Create image (BGR or grayscale) */
   virtual bool  Create( int width, int height, int bits_per_pixel, int image_origin = 0 );

   /* Load image from specified file */
   virtual bool  Load( const char* filename, int desired_color = 1 );

   /* Load rectangle from the file */
   virtual bool  LoadRect( const char* filename,
      int desired_color, CvRect r );

#if defined WIN32 || defined _WIN32
   virtual bool  LoadRect( const char* filename,
      int desired_color, RECT r )
   {
      return LoadRect( filename, desired_color,
         cvRect( r.left, r.top, r.right - r.left, r.bottom - r.top ));
   }
#endif

   /* Save entire image to specified file. */
   virtual bool  Save( const char* filename );

   /* Get copy of input image ROI */
   virtual void  CopyOf( CvvImage& image, int desired_color = -1 );
   virtual void  CopyOf( IplImage* img, int desired_color = -1 );

   IplImage* GetImage() { return m_img; };
   virtual void  Destroy(void);

   /* width and height of ROI */
   int Width() { return !m_img ? 0 : !m_img->roi ? m_img->width : m_img->roi->width; };
   int Height() { return !m_img ? 0 : !m_img->roi ? m_img->height : m_img->roi->height;};
   int Bpp() { return m_img ? (m_img->depth & 255)*m_img->nChannels : 0; };

   virtual void  Fill( int color );

   /* draw to highgui window */
   virtual void  Show( const char* window );

#if defined WIN32 || defined _WIN32
   /* draw part of image to the specified DC */
   virtual void  Show( HDC dc, int x, int y, int width, int height,
      int from_x = 0, int from_y = 0 );
   /* draw the current image ROI to the specified rectangle of the destination DC */
   virtual void  DrawToHDC( HDC hDCDst, RECT* pDstRect );
#endif

protected:

   IplImage*  m_img;
};

typedef CvvImage CImage;

#endif

CvvImage.cpp

#include "StdAfx.h"
#include "CvvImage.h"

//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////

CV_INLINE RECT NormalizeRect( RECT r );
CV_INLINE RECT NormalizeRect( RECT r )
{
   int t;

   if( r.left > r.right )
   {
      t = r.left;
      r.left = r.right;
      r.right = t;
   }

   if( r.top > r.bottom )
   {
      t = r.top;
      r.top = r.bottom;
      r.bottom = t;
   }

   return r;
}

CV_INLINE CvRect RectToCvRect( RECT sr );
CV_INLINE CvRect RectToCvRect( RECT sr )
{
   sr = NormalizeRect( sr );
   return cvRect( sr.left, sr.top, sr.right - sr.left, sr.bottom - sr.top );
}

CV_INLINE RECT CvRectToRect( CvRect sr );
CV_INLINE RECT CvRectToRect( CvRect sr )
{
   RECT dr;
   dr.left = sr.x;
   dr.top = sr.y;
   dr.right = sr.x + sr.width;
   dr.bottom = sr.y + sr.height;

   return dr;
}

CV_INLINE IplROI RectToROI( RECT r );
CV_INLINE IplROI RectToROI( RECT r )
{
   IplROI roi;
   r = NormalizeRect( r );
   roi.xOffset = r.left;
   roi.yOffset = r.top;
   roi.width = r.right - r.left;
   roi.height = r.bottom - r.top;
   roi.coi = 0;

   return roi;
}

void  FillBitmapInfo( BITMAPINFO* bmi, int width, int height, int bpp, int origin )
{
   assert( bmi && width >= 0 && height >= 0 && (bpp == 8 || bpp == 24 || bpp == 32));

   BITMAPINFOHEADER* bmih = &(bmi->bmiHeader);

   memset( bmih, 0, sizeof(*bmih));
   bmih->biSize = sizeof(BITMAPINFOHEADER);
   bmih->biWidth = width;
   bmih->biHeight = origin ? abs(height) : -abs(height);
   bmih->biPlanes = 1;
   bmih->biBitCount = (unsigned short)bpp;
   bmih->biCompression = BI_RGB;

   if( bpp == 8 )
   {
      RGBQUAD* palette = bmi->bmiColors;
      int i;
      for( i = 0; i < 256; i++ )
      {
         palette[i].rgbBlue = palette[i].rgbGreen = palette[i].rgbRed = (BYTE)i;
         palette[i].rgbReserved = 0;
      }
   }
}

CvvImage::CvvImage()
{
   m_img = 0;
}

void CvvImage::Destroy()
{
   cvReleaseImage( &m_img );
}

CvvImage::~CvvImage()
{
   Destroy();
}

bool  CvvImage::Create( int w, int h, int bpp, int origin )
{
   const unsigned max_img_size = 10000;

   if( (bpp != 8 && bpp != 24 && bpp != 32) ||
      (unsigned)w >=  max_img_size || (unsigned)h >= max_img_size ||
      (origin != IPL_ORIGIN_TL && origin != IPL_ORIGIN_BL))
   {
      assert(0); // most probably, it is a programming error
      return false;
   }

   if( !m_img || Bpp() != bpp || m_img->width != w || m_img->height != h )
   {
      if( m_img && m_img->nSize == sizeof(IplImage))
         Destroy();

      /* prepare IPL header */
      m_img = cvCreateImage( cvSize( w, h ), IPL_DEPTH_8U, bpp/8 );
   }

   if( m_img )
      m_img->origin = origin == 0 ? IPL_ORIGIN_TL : IPL_ORIGIN_BL;

   return m_img != 0;
}

void  CvvImage::CopyOf( CvvImage& image, int desired_color )
{
   IplImage* img = image.GetImage();
   if( img )
   {
      CopyOf( img, desired_color );
   }
}


#define HG_IS_IMAGE(img)                                                  \
   ((img) != 0 && ((const IplImage*)(img))->nSize == sizeof(IplImage) && \
   ((IplImage*)img)->imageData != 0)


void  CvvImage::CopyOf( IplImage* img, int desired_color )
{
   if( HG_IS_IMAGE(img) )
   {
      int color = desired_color;
      CvSize size = cvGetSize( img ); 

      if( color < 0 )
         color = img->nChannels > 1;

      if( Create( size.width, size.height,
         (!color ? 1 : img->nChannels > 1 ? img->nChannels : 3)*8,
         img->origin ))
      {
         cvConvertImage( img, m_img, 0 );
      }
   }
}


bool  CvvImage::Load( const char* filename, int desired_color )
{
   IplImage* img = cvLoadImage( filename, desired_color );
   if( !img )
      return false;

   CopyOf( img, desired_color );
   cvReleaseImage( &img );

   return true;
}


bool  CvvImage::LoadRect( const char* filename,
                   int desired_color, CvRect r )
{
   if( r.width < 0 || r.height < 0 ) return false;

   IplImage* img = cvLoadImage( filename, desired_color );
   if( !img )
      return false;

   if( r.width == 0 || r.height == 0 )
   {
      r.width = img->width;
      r.height = img->height;
      r.x = r.y = 0;
   }

   if( r.x > img->width || r.y > img->height ||
      r.x + r.width < 0 || r.y + r.height < 0 )
   {
      cvReleaseImage( &img );
      return false;
   }

   /* truncate r to source image */
   if( r.x < 0 )
   {
      r.width += r.x;
      r.x = 0;
   }
   if( r.y < 0 )
   {
      r.height += r.y;
      r.y = 0;
   }

   if( r.x + r.width > img->width )
      r.width = img->width - r.x;

   if( r.y + r.height > img->height )
      r.height = img->height - r.y;

   cvSetImageROI( img, r );
   CopyOf( img, desired_color );

   cvReleaseImage( &img );
   return true;
}


bool  CvvImage::Save( const char* filename )
{
   if( !m_img )
      return false;
   cvSaveImage( filename, m_img );
   return true;
}


void  CvvImage::Show( const char* window )
{
   if( m_img )
      cvShowImage( window, m_img );
}


void  CvvImage::Show( HDC dc, int x, int y, int w, int h, int from_x, int from_y )
{
   if( m_img && m_img->depth == IPL_DEPTH_8U )
   {
      uchar buffer[sizeof(BITMAPINFOHEADER) + 1024];
      BITMAPINFO* bmi = (BITMAPINFO*)buffer;
      int bmp_w = m_img->width, bmp_h = m_img->height;

      FillBitmapInfo( bmi, bmp_w, bmp_h, Bpp(), m_img->origin );

      from_x = MIN( MAX( from_x, 0 ), bmp_w - 1 );
      from_y = MIN( MAX( from_y, 0 ), bmp_h - 1 );

      int sw = MAX( MIN( bmp_w - from_x, w ), 0 );
      int sh = MAX( MIN( bmp_h - from_y, h ), 0 );

      SetDIBitsToDevice(
         dc, x, y, sw, sh, from_x, from_y, from_y, sh,
         m_img->imageData + from_y*m_img->widthStep,
         bmi, DIB_RGB_COLORS );
   }
}


void  CvvImage::DrawToHDC( HDC hDCDst, RECT* pDstRect ) 
{
   if( pDstRect && m_img && m_img->depth == IPL_DEPTH_8U && m_img->imageData )
   {
      uchar buffer[sizeof(BITMAPINFOHEADER) + 1024];
      BITMAPINFO* bmi = (BITMAPINFO*)buffer;
      int bmp_w = m_img->width, bmp_h = m_img->height;

      CvRect roi = cvGetImageROI( m_img );
      CvRect dst = RectToCvRect( *pDstRect );

      if( roi.width == dst.width && roi.height == dst.height )
      {
         Show( hDCDst, dst.x, dst.y, dst.width, dst.height, roi.x, roi.y );
         return;
      }

      if( roi.width > dst.width )
      {
         SetStretchBltMode(
            hDCDst,           // handle to device context
            HALFTONE );
      }
      else
      {
         SetStretchBltMode(
            hDCDst,           // handle to device context
            COLORONCOLOR );
      }

      FillBitmapInfo( bmi, bmp_w, bmp_h, Bpp(), m_img->origin );

      ::StretchDIBits(
         hDCDst,
         dst.x, dst.y, dst.width, dst.height,
         roi.x, roi.y, roi.width, roi.height,
         m_img->imageData, bmi, DIB_RGB_COLORS, SRCCOPY );
   }
}


void  CvvImage::Fill( int color )
{
   cvSet( m_img, cvScalar(color&255,(color>>8)&255,(color>>16)&255,(color>>24)&255) );
}


当然,最后不要忘了,在用到CvvImage的源文件中include CvvImage头文件。

OpenCV 2.2版本以上显示图片到 MFC 的 Picture Control 控件中 OpenCV 2.2 以及后面的版本取消掉了 CvvImage.h 和CvvImage.cpp 两个文件,直接导致了苦逼的程序员无法调用里面的显示函数来将图片显示到 MFC 的 Picture Control 控件中。为此,网上很多人表示只要将那两个文件人为的提取出来然后放到工程里面就解决问题了,也提供了两个文件的下载,但是这麻烦不说,还会导致一些奇奇怪怪的报错(至少本人是这样的,很崩溃!)。所以 阅读详情

相关推荐

解决Opencv高低版本不兼容问题

目前OpenCV版本已更新到2.4...由此出现了一系列问题,解决如下: 1、cxcore.h等头文件找不到: 法一、将opencv1.0中的各种.h或者.lib文件拷到opencv2.3.1对应include/library的路径的文件夹下。 e.g.   Cannot open include file: 'cxtypes.h': No such file or

DaveBobo的博客 3166

OpenCV 4.x不再提供IplImage类型支持了?不再支持CvvImage类库?来看具体细节

1、OpenCV 4.x使用C++ 11重构,原则上不建议再使用C语言的函数。 例如IplImage* img;编译会出错,如果非要使用,请新增以下红色的字体,头文件。 #include <opencv2/opencv.hpp>#include <opencv2/imgproc/imgproc_c.h> #include <opencv2/imgproc/typ...

$firecat利白的代码足迹$ 1万+

opencv新版本中无cvvimage函数的替代

对于opencv版本在2.2以上的里面是没有cvvimage这个函数的,这时我们只需将压缩包里面的头文件和cpp文件添加到你的工程里面去,你就可以实现在opencv2.2版本以后的仍然使用cvvimage函数。只需把头文件和cpp加入再在工程中include头文件即可使用。

CvvImage在openCV2.2中移除

<br />CvvImage类:<br />-----------------头文件--------------------------------------------<br />#pragma once<br />#ifndef CVVIMAGE_CLASS_DEF<br />#define CVVIMAGE_CLASS_DEF<br />#include "opencv.hpp"<br />/* CvvImage class definition */<br />class  CvvImage<br

shandianling 1838

关于cvConvertImage的一些注意事项

cvConvertImage函数只要满足下列条件就可以:输入图像必须必须是1,3或者4通道,输出图像必须是8位的单通道或者3通道。以代码为例进行说明

opencv2.2.-源码

本资源是opencv的源码,主要是防止国外网址比较慢而提供国内的下载,如果需要具体某个编译器版本的库,请自己通过cmake进行编译。 另外一个方面,可能做科研的时候需要指定版本的库,可以通过源码生成库。

OpenCV高版本下使用CvvImage.h

OpenCV2.2版本后取消了CvvImage类,若当前使用的OpenCV版本高于2.2版本,并且想使用CvvImage来显示图片,可以将其CvvImage.h和CvvImage.cpp头文件加入到解决方案中。(注意:最好是生成CvvImage.h和CvvImage.cpp两个文件,并添加到项目文件路径下,引用时只需添加#include "CvvImage.h")以下是CvvImage.h的源码/...

sinat_39061823的博客 6465

数字后端实现Innovus教程之手把手教你N种高亮timing path和clock tree方法

数字IC后端设计实现Innovus教程之手把手教你N种高亮timing path和clock tree方法

weixin_37584728的博客 3599

opencv学习笔记(二)vs2010+opencv2.3.1 mfc的实现---利用图片控件显示

opencv环境设置是照opencv中文网站的教程进行的 下面是一位北航的博士编写的实现过程,但是在我编译的时候出了点问题 http://blog.csdn.net/chenyusiyuan/article/details/4744097 首先: 在其中的 首先在项目属性中加载lib文件:菜单Project -> Properties -> Configuration Propertie

zlei2013141的专栏 3742

UIPath 获取网页元素做遍历点击的实现

UIPath 获取网页元素做遍历点击的实现

geekqian的博客 1万+

FPGA_adc采样并通过以太网发送到上位机

本项目使用FPGA-ZYNQ-7020采集8通道ADC数据,通过以太网上传到上位机显示波形PL部分包括数据的获取与处理,数据从PL传递到PSPS部分包括以太网的发送,由PL到PS的中断触发本文章不详细讲解背后原理 但保证每一步足够详细,跟着就能实现。本人FPGA平台 大磊FPGA7020开发板 vivado2020.2 vitis2020.2 匿名上位机公开版

weixin_42304868的博客 5626

VS2010 / MFC + OpenCV 2.4.3 打开图片

一、新建项目 菜单,文件 - 新建 - 项目 Visual C++,MFC应用程序,名称为MFC_SGOWIMG 下一步 基于对话框,不使用Unicode库,在静态库中使用MFC,完成 二、配置OpenCV环境 可参考http://dczxxuhai.blog.163.com/blog/static/172216907201172624243741/

花开不败 1884

Pytest 常见问题及其解决方案

Pytest 是一个强大且灵活的测试框架,但初学者在使用过程中难免会遇到各种问题。希望通过这篇文章,你能更好地应对常见的挑战,写出更高效、更稳定的测试代码。测试不是负担,而是保障。写好测试不仅能提高代码质量,还能让你在面对变更时更加从容自信。

qq_52137592的博客 900

在MFC下运行OpenCV

原来一直都想在mfc下运行opencv,感觉这样可以结合两者的特点,一种霸气的感觉。。有木有。。。先都没有勇气去实现,今天花了三个小时,终于搞出来了。主要是opencv2.3不支持CvvImage,而自己感觉opencv论坛中没有说很仔细,至少对我这个菜鸟是这样的。下面是论坛的连接 http://www.opencv.org.cn/index.php/MFC%E4%B8%AD%E5%BF%AB%

xfortius的专栏 673

【DDSCAT——离散偶极近似仿真程序04】参数理解和模型设计

在这一部分,我们开始理解DDSCAT程序设计中的一些参数问题。 承接第二部分内容中的ddscat.par文件,我们来聊一聊偶极子、实际体积、有效半径等关键词。 一、偶极子点阵 手册中说,我们需要设计模型(target/目标),它是有偶极子点阵组成的。偶极子,顾名思义,是由一对电荷组成的,但我们不用设计一对,我们设计一个点就行,...

XD_Yangf的博客 7552

Cesium中实现阴影率分析

看到群里有人在研究这个,所以看了一下。主要是模仿超图的,实现原理超图有做回答:但其实超图的这个实现方式还是过于复杂,原因是:既然是获取太阳的日照阴影,而Cesium中原本就存在太阳,且能投射阴影,因此其实并不需要再次计算太阳位置并计算视锥获取深度图,直接使用Cesium原生的太阳深度图即可。

weixin_43481439的博客 2217

将OpenCV输出的图像嵌入显示到子窗口控件中(支持Windows、Linux)

OpenCV用来做视频处理很方便,能用窗口显示处理后的图像,但是它默认显示图像的窗口是弹出式的,而我们很多情况下需要将图像显示到自己软件的窗口控件中。这应该怎么做呢?上网搜过一些方案,也试了一下,最后自己优化了一下,把其中几种比较靠谱的方法分享给大家。 第一种,使用Cvvimage类 + GDI方式显示图像。 CvvImage类有个函数DrawPicToHDC (IplImage *img, ...

爱写代码的自由人 3654

CNN+LSTM+Attention+DNN模型实战:pytorch搭建CNN+LSTM+Attention+DNN行车速度预测

CNN+LSTM+Attention+DNN模型实战:pytorch搭建CNN+LSTM+Attention+DNN行车速度预测

6045

MFC中 利用OpenCv显示图片到Picture Control控件

在做项目的过程中需要在MFC中 利用OpenCv显示图片到Picture Control控件 读取图片可以简单的利用opencv中的cvLoadImage()即可  但是使其以自适应大小显示到Picture Control控件中则需要利用opencv中的CvvImage但是opencv2.2以上已经对此不支持了 解决方案 1.将CvvImage.h和CvvImage.cpp加入到工程中去

昔月长弓的专栏 4996

Roboflow 与 YOLOv11 数据集全流程:从获取到训练,让你数据无忧

上传图像:点击“Upload”按钮,批量上传本地图像(支持 JPG、PNG 格式,单张最大 10MB)。智能标注:利用 Roboflow 的“Auto-Annotate”功能,基于预训练模型自动生成标注,再手动微调,标注效率提升 70%。格式导出:标注完成后,同样选择“YOLOv11”格式导出,流程与公开数据集一致。

m0_71589036的博客 273

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

MFC+Opencv显示图像的几种方法

MFC显示opencv图像的几种方法

沉水入火的博客 4977

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

在MFC中显示opencv图像

在MFC中,不能将突破从IplIamge或cv::Mat直接显示在图片控件中。需要先把IplImage或 cv::Mat先转换为CvvImage。1.显示IplImage中图像需要先把IplImage图像转换为CvvImage类型IplImage* test_img = cvLoadImage("1.jpg",1); CDC* pDC = GetDlgItem(IDC_TEST_IMG)->GetD

IT修道者的专栏 1513

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

上一篇: 网页flash效果的js代码
下一篇: glViewport()函数和glOrtho()函数的理解
GeniusSnail
博客等级 码龄15年 8粉丝 10原创
评论 5
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值