结构:
学习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,如有错误还请指正。