opencv 入门 (1)图像的载入、显示和输出
图像的基本操作:
调用的函数
1. 图像读取 imread( )
2. 窗口创建 namedWindow( )
3. 图像显示 imshow( )
4. 图像保存 imwrite( )
5. 资源释放 destroyWindow( )
示例程序:
#include"opencv2/imgproc/imgproc.hpp"
#include"opencv2/highgui/highgui.hpp"
using namespace cv;
void main()
{
Mat img1=imread("Lena.jpg"); //读取图片
cvtColor(img1,img1,CV_BGR2GRAY); //转为灰度图
namedWindow("imgWindow"); //创建窗口
imshow("imgWindow",img1); //显示图片
imwrite("img2.bmp",img1); //保存结果图片
waitKey(0); //暂停按键 等待
}
这里简单地介绍了 使用opwncv 来读取图片,创建窗口,把图片放在窗口中显示,然后保存图片等。
补充知识(图像属性):
1. empty( ) 判断文件读取是否正确
2. rows( ) 获取图像地行数(高度)
3. cols( ) 获取图像地列数(长度)
4. channels( ) 获取图像通道数
5. depth( ) 获取图像位深度
举例说明1:
Mat img=imread("Lena.jpg");
if(img.empty( )) //如果读取地图片为空 ,异常处理
{
std::count<<"read image erroe!"
}
举例说明2:
Mat img=imread("Lena.jpg");
std::count<<"图像长度为:"<<img.cols;
std::count<<"图像宽度为:"<<img.rows;
如果有兴趣可以往下看,深入一点了解:
1.1 关于 OpenCV 的命名空间
OpenCV 中的 C++类和函数都是定义在命名空间 cv 之内的,有两种方法可以访问。第一种是,在代码开头的适当位置,加上 using name space cv; 这句。另外一种是在使用 OpenCV类和函数时,都加入 cv::命名空间。不过后者这种情况比较繁琐,所以使用第一种方法比较简单。在写简单的 OpenCV 程序的时候,如下这两句是标配:
#include <opencv2/opencv.hpp>
using namespace cv;
1.2 Mat 类型
cv::Mat 类是用于保存图像以及其它矩阵数据的数据结构。默认情况下,其尺寸为 0,也可以指定初始尺寸。比如定义一个 Mat 类对象:cv::Mat pic(320,640,cv::Scalar(100));
对于本实验,需要用到关于 Mat 其实就简单的这样一句代码: Mat myMat= imread("Test.jpg");
表示从工程目录下把一幅名为 Test.jpg 的图像载入到 Mat 类型的 myMat 中。这里的 imread函数将在下文介绍。
综合示例
综合示例主要完成载入图像,进行简单图像混合,显示图像,并且输出混合后的图像到JPG 文件。源代码如下
#include<opencv2/opencv.hpp>
using namespace cv;
int main()
{
//【一、图像的载入和显示】
// 描述:以下三行代码用于完成图像的载入和显示
Mat test00 = imread("lena.jpg"); //载入图像到Mat
namedWindow("lena"); //创建一个名为 "lena"的窗口
imshow("lena", test00); //显示名为 "lena"的窗口
//【二、初级图像混合】
Mat image = imread("Baboon.jpg", 1); //载入图片
Mat logo = imread("LOGO.jpg");
//载入后先显示
namedWindow("Baboon狒狒");
imshow("Baboon狒狒", image);
namedWindow("logo图");
imshow("logo图", logo);
//定义一个Mat类型,用于存放,图像的ROI
Mat imageROI;
imageROI = image(Rect(50, 50, logo.cols, logo.rows)); //方法一
//imageROI=image(Range(50,50+logo.rows),Range(50,50+logo.cols)); //方法二
addWeighted(imageROI, 0.5, logo, 0.5, 0.0, imageROI); //将logo加到原图上
namedWindow("狒狒+logo图"); //显示结果
imshow("狒狒+logo图", image);
//【三、图像的输出】
imwrite("狒狒logo图.jpg", image); //输出一张jpg图片到工程目录下
waitKey();
return 0;
}
对了补充说明一下,在建好地工程目录下,要放进相关地图片,程序才能正常执行.
运行这个程序,会弹出 4 个在 OpenCV 中创建的窗口,运行截图如图 1 所示:
希望对你有帮助。