opencv第一个程序

来源:互联网 发布:域名在哪续费 编辑:程序博客网 时间:2024/05/17 09:19

结构:

学习opencv一书中,提到opencv主体一共分为五个模块。


其中图中没有的模块为没有包含CvAux模块,该模块中一般存放一些即将被淘汰的算法和函数(如基于嵌入式隐马尔可夫模型的人脸识别算法),同时还有一些新出现的实验性的算法和函数(如背景和前景的分割)。

第一个程序

#include <opencv2/opencv.hpp>using namespace std;int main(int argc, char *argv[]){IplImage *img = cvLoadImage("E:\\清明乐山游\\CIMG6232.JPG"); //cvLoadImage:加载图片到内存;cvNamedWindow("窗体", CV_WINDOW_AUTOSIZE);//cv::WINDOW_AUTOSIZE);//创建一个windows窗体标题为参数一;cvShowImage("窗体", img); //显示图片到窗体中;cvWaitKey(0);//等待输入一个按键;cvReleaseImage(&img);//释放图片IplImage结构;cvDestroyWindow("窗体");//释放创建的windows窗体return 0;}
我们来看一下IplImage的结构:
typedef struct#ifdef __cplusplus  CV_EXPORTS#endif_IplImage{    int  nSize;             /**< sizeof(IplImage) */    int  ID;                /**< version (=0)*/    int  nChannels;         /**< Most of OpenCV functions support 1,2,3 or 4 channels */    int  alphaChannel;      /**< Ignored by OpenCV */    int  depth;             /**< Pixel depth in bits: IPL_DEPTH_8U, IPL_DEPTH_8S, IPL_DEPTH_16S,                               IPL_DEPTH_32S, IPL_DEPTH_32F and IPL_DEPTH_64F are supported.  */    char colorModel[4];     /**< Ignored by OpenCV */    char channelSeq[4];     /**< ditto */    int  dataOrder;         /**< 0 - interleaved color channels, 1 - separate color channels.                               cvCreateImage can only create interleaved images */    int  origin;            /**< 0 - top-left origin,                               1 - bottom-left origin (Windows bitmaps style).  */    int  align;             /**< Alignment of image rows (4 or 8).                               OpenCV ignores it and uses widthStep instead.    */    int  width;             /**< Image width in pixels.                           */    int  height;            /**< Image height in pixels.                          */    struct _IplROI *roi;    /**< Image ROI. If NULL, the whole image is selected. */    struct _IplImage *maskROI;      /**< Must be NULL. */    void  *imageId;                 /**< "           " */    struct _IplTileInfo *tileInfo;  /**< "           " */    int  imageSize;         /**< Image data size in bytes                               (==image->height*image->widthStep                               in case of interleaved data)*/    char *imageData;        /**< Pointer to aligned image data.         */    int  widthStep;         /**< Size of aligned image row in bytes.    */    int  BorderMode[4];     /**< Ignored by OpenCV.                     */    int  BorderConst[4];    /**< Ditto.                                 */    char *imageDataOrigin;  /**< Pointer to very origin of image data                               (not necessarily aligned) -                               needed for correct deallocation */#ifdef __cplusplus    _IplImage() {}    _IplImage(const cv::Mat& m);#endif}IplImage;


运行后效果:



因为窗体是按照图片进行扩充的。所以我们看到的窗体没有把图片显示完整。我们调整下
cvNamedWindow("窗体", CV_WINDOW_NORMAL);

效果图



我们还可以使用cvResizeWindow更改窗体的大小。还可以使用cv::resize把图片的大小调整下。

声明:本人初学opencv,如有错误还请指正。




原创粉丝点击