Opencv step by step - 图像载入


之前已经使用过图像载入了,这里再讲述一下其他的一些tip。



先来一次普通的载入:

#include <cv.h>
#include <highgui.h>


int main(int argc, char **argv)
{
	IplImage *image = cvLoadImage(argv[1]);
	//CV_WINDOW_AUTOSIZE == 1
	cvNamedWindow(argv[1], CV_WINDOW_AUTOSIZE);

	cvShowImage(argv[1], image);
	cvWaitKey(0);
	cvDestroyWindow(argv[1]);
	cvReleaseImage(&image);

	return 0;
}





这里要注意,这个窗口大小是不可以改变的,下面再修改代码:


gedit ./modules/highgui/include/opencv2/highgui/highgui_c.h

发现:

    //These 2 flags are used by cvNamedWindow and cvSet/GetWindowProperty
    CV_WINDOW_NORMAL       = 0x00000000, //the user can resize the window (no constraint)  / also use to switch a fullscreen window to a normal size
    CV_WINDOW_AUTOSIZE     = 0x00000001, //the user cannot resize the window, the size is constrainted by the image displayed
    CV_WINDOW_OPENGL       = 0x00001000, //window with opengl support

#include <cv.h>
#include <highgui.h>


int main(int argc, char **argv)
{
	IplImage *image = cvLoadImage(argv[1]);
	//CV_WINDOW_AUTOSIZE == 1
	//CV_WINDOW_NORMAL == 0
	cvNamedWindow(argv[1], <strong>CV_WINDOW_NORMAL</strong>);

	cvShowImage(argv[1], image);
	cvWaitKey(0);
	cvDestroyWindow(argv[1]);
	cvReleaseImage(&image);

	return 0;
}


这样就可以随便拖放大小了(右下角的地方拖拽)




然后再加料:


#include <cv.h>
#include <highgui.h>


int main(int argc, char **argv)
{
	IplImage *image = cvLoadImage(argv[1]);
	//CV_WINDOW_AUTOSIZE == 1
	//CV_WINDOW_NORMAL == 0
	cvNamedWindow(argv[1], CV_WINDOW_NORMAL);

	cvShowImage(argv[1], image);

<strong>	cvResizeWindow(argv[1], 200, 100);</strong>

	cvWaitKey(0);
	cvDestroyWindow(argv[1]);
	cvReleaseImage(&image);

	return 0;
}

这里在代码里面设置了大小,不用亲手操刀了。



继续加料:



#include <cv.h>
#include <highgui.h>


int main(int argc, char **argv)
{
	IplImage *image = cvLoadImage(argv[1]);
	//CV_WINDOW_AUTOSIZE == 1
	//CV_WINDOW_NORMAL == 0
	cvNamedWindow(argv[1], CV_WINDOW_NORMAL);

	cvShowImage(argv[1], image);

	cvResizeWindow(argv[1], 200, 100);

<strong>	cvMoveWindow(argv[1], 500 ,500);</strong>
	
	cvWaitKey(0);
<strong>	cvDestroyAllWindows();</strong>
	cvReleaseImage(&image);

	return 0;
}

这里需要自己体验一下,将图像窗口移动到屏幕某个地方,而且关闭窗口可以批量关闭。


接下来是关于图像形式的操作:

#include <cv.h>
#include <highgui.h>


int main(int argc, char **argv)
{
	IplImage *image = cvLoadImage(argv[1], CV_LOAD_IMAGE_GRAYSCALE);
	//CV_WINDOW_AUTOSIZE == 1
	//CV_WINDOW_NORMAL == 0
	cvNamedWindow(argv[1], CV_WINDOW_NORMAL);

	cvShowImage(argv[1], image);


	cvWaitKey(0);
	cvDestroyAllWindows();
	cvReleaseImage(&image);

	return 0;
}




变黑白了,实际上是被转成了单通道,但是没有偏蓝偏绿,估计是进行了彩色到灰度的转换,详情还要看代码:

enum
{
/* 8bit, color or not */
    CV_LOAD_IMAGE_UNCHANGED  =-1,
/* 8bit, gray */
    CV_LOAD_IMAGE_GRAYSCALE  =0,
/* ?, color */
    CV_LOAD_IMAGE_COLOR      =1,
/* any depth, ? */
    CV_LOAD_IMAGE_ANYDEPTH   =2,
/* ?, any color */
    CV_LOAD_IMAGE_ANYCOLOR   =4
};



    // CoreGraphics will take care of converting to grayscale and back as long as the
    // appropriate colorspace is set
    if( color == CV_LOAD_IMAGE_GRAYSCALE )
    {
        colorSpace = CGColorSpaceCreateDeviceGray();
        bpp = 1;
        alphaInfo = kCGImageAlphaNone;
    }

暂时没找到此函数的内部定义。



posted @ 2014-11-04 22:48  crazy_thb  阅读(277)  评论(0编辑  收藏  举报