网站建设方案 安全,网站备案号图标,360官方网站网址,电子商务课程内容OpenCV可以从存储介质中读入图像#xff0c;也可以将摄像头(Camera)抓取的图像载入内存#xff0c;然后进行处理。而存储图像就是将内存中的图像数据写入存储介质中#xff0c;如写入硬盘、优盘等。 OpenCV要读入图像、操作图像。首先要用到Mat类#xff0c;并且需创建Mat对… OpenCV可以从存储介质中读入图像也可以将摄像头(Camera)抓取的图像载入内存然后进行处理。而存储图像就是将内存中的图像数据写入存储介质中如写入硬盘、优盘等。 OpenCV要读入图像、操作图像。首先要用到Mat类并且需创建Mat对象。要用Camera抓取图像需用到VideoCapture 类并构建VideoCapture对象。 从档案读入图像 读入图像 需用到imread函数其基于的原型如下 Mat cv::imread(const String filename, int flags IMREAD_COLOR) 参数filename为需读入图像的完整名称包含文件路径、文件名、及扩展名。扩展名必须是OpenCV支持的图像类型。OpenCV支持的图像类型如下 参数 flags包含以下几种 IMREAD_COLOR 为缺省值读入图像时将图像装换为3通道 BGR 色彩图像。 IMREAD_UNCHANGED 读入图像时按原样返回加载的图像如果原图存在alpha通道否则会被裁 剪。忽略 EXIF方向。 IMREAD_GRAYSCALE 读入图像时把图像转换为单通道的灰度图像。 IMREAD_ANYDEPTH 如果原图为16bit/32bit,读入时保留原图像深度其余的转换为8bit。 IMREAD_ANYCOLOR 以任何可能的颜色格式读取图像。也就是保留原图像格式。 IMREAD_LOAD_GDAL 读入图像时 使用gdal驱动程序加载图像。 IMREAD_REDUCED_GRAYSCALE_2 读入图像时将图像转换为单通道灰度图像图像大小减小1/2。 IMREAD_REDUCED_COLOR_2 读入图像时将图像转换为3通道BGR色彩图像并且图像大小减1/2。 IMREAD_REDUCED_GRAYSCALE_4 读入图像时将图像转换为单通道灰度图像图像大小减小1/4。 IMREAD_REDUCED_COLOR_4 读入图像时将图像转换为3通道BGR色彩图像并且图像大小减1/4。 IMREAD_REDUCED_GRAYSCALE_8 读入图像时将图像转换为单通道灰度图像图像大小减小1/8。 IMREAD_REDUCED_COLOR_8 读入图像时将图像转换为3通道BGR色彩图像并且图像大小减1/8。 IMREAD_IGNORE_ORIENTATION 读入图像时不会根据EXIF的方向标志旋转图像。 显示图像 要显示读入图像则需用到imshow()函数imshow()函数的原型如下 void cv::imshow(const String winname, InputArray mat) winname 为显示图像窗口的名称如果输入的名称为一个建好的窗口图像将显示在该窗口上如果不存在输入名的窗口则以输入名新建一个窗口并将图像显示在该窗口上。 mat 为装载有欲显示图片的Mat对象。 存储图像 要存储图像需用到 imwrite()函数imwrite()函数的原型如下 bool cv::imwrite(const String filename, InputArry img, const std::vectorint params std::vectorint()) 参数filename 为存储到介质中的完整文件名需包含存储路径、文件名、扩展名。扩展名必须是OpenCV支持的图像类型。 参数img为载有需存储图像的Mat对象。最后一个参数通常保持缺省状态不予理会。 图像读入、显示、存储示例 下面以一个实例来演示OpenCV图像读入、显示、存储操作。 1. 新建一个VC2022控制台空项目将需操作的图片Copy到该项目文件夹下这里略去OpenCV4.8在VS2022中的配置操作介绍。 2. 在解决方案源文件夹中添加新建项main.cpp 3. 在main.cpp中添加源代码所加代码如下
#include iostream
#include opencv2/opencv.hppusing namespace cv;
using namespace std;int main(int argc, char** argv)
{Mat src1 imread(1.jpg, IMREAD_UNCHANGED);namedWindow(src1, WINDOW_AUTOSIZE);imshow(src1, src1);Mat src2 imread(1.jpg, IMREAD_GRAYSCALE);namedWindow(src2, WINDOW_AUTOSIZE);imshow(src2, src2);Mat src3 imread(1.jpg, IMREAD_COLOR);namedWindow(src3, WINDOW_AUTOSIZE);imshow(src3, src3);Mat src4 imread(1.jpg, IMREAD_ANYDEPTH);namedWindow(src4, WINDOW_AUTOSIZE);imshow(src4 , src4);Mat src5 imread(1.jpg, IMREAD_ANYCOLOR);namedWindow(src5, WINDOW_AUTOSIZE);imshow(src5, src5);Mat src6 imread(1.jpg, IMREAD_LOAD_GDAL);namedWindow(src6, WINDOW_AUTOSIZE);imshow(src6 , src6);Mat src7 imread(1.jpg, IMREAD_REDUCED_GRAYSCALE_2);namedWindow(src7, WINDOW_AUTOSIZE);imshow(src7, src7);Mat src8 imread(1.jpg, IMREAD_REDUCED_COLOR_2);namedWindow(src8, WINDOW_AUTOSIZE);imshow(src8, src8);Mat src9 imread(1.jpg, IMREAD_REDUCED_GRAYSCALE_4);namedWindow(src9, WINDOW_AUTOSIZE);imshow(src9, src9);Mat src10 imread(1.jpg, IMREAD_REDUCED_COLOR_4);namedWindow(src10, WINDOW_AUTOSIZE);imshow(src10, src10);Mat src11 imread(1.jpg, IMREAD_REDUCED_GRAYSCALE_8);namedWindow(src11, WINDOW_AUTOSIZE);imshow(src11, src11);Mat src12 imread(1.jpg, IMREAD_REDUCED_COLOR_8);namedWindow(src12, WINDOW_AUTOSIZE);imshow(src12, src12);Mat src13 imread(1.jpg, IMREAD_IGNORE_ORIENTATION);namedWindow(src13, WINDOW_AUTOSIZE);imshow(src13, src13);moveWindow(src1, 10, 50);moveWindow(src2, 10, src1.rows 100);moveWindow(src3, src1.cols 10, 50);moveWindow(src4, src1.cols 10, src1.rows 100);moveWindow(src5, src1.cols * 2 10, 50);moveWindow(src6, src1.cols * 2 10, src1.rows 100);moveWindow(src7, src1.cols * 3 10, 50);moveWindow(src8, src1.cols * 3 10, src1.rows 100);moveWindow(src9, src1.cols * 4 10, 50);moveWindow(src10, src1.cols * 4 10, src1.rows 100);moveWindow(src11, src1.cols * 5 10, 50);moveWindow(src12, src1.cols * 5 10, src1.rows 100);moveWindow(src13, src1.cols * 6 10, 50);imwrite(1.bmp, src2);waitKey(0); // wait till any key is pressedreturn 0;
} 4. 试运行 按ctrlF5,结果如下 打开项目文件夹可以看到多出了一个1.bmp文件。
双击这个文件用Win10照片打开。 结果如下 是一张灰度图片说明存储正确。
从摄像头获取图像
将前面的部分代码注释掉加入如下代码 #include iostream
#include opencv2/opencv.hppusing namespace cv;
using namespace std;int main(int argc, char** argv)
{/*Mat src1 imread(1.jpg, IMREAD_UNCHANGED);namedWindow(src1, WINDOW_AUTOSIZE);imshow(src1, src1);Mat src2 imread(1.jpg, IMREAD_GRAYSCALE);namedWindow(src2, WINDOW_AUTOSIZE);imshow(src2, src2);Mat src3 imread(1.jpg, IMREAD_COLOR);namedWindow(src3, WINDOW_AUTOSIZE);imshow(src3, src3);Mat src4 imread(1.jpg, IMREAD_ANYDEPTH);namedWindow(src4, WINDOW_AUTOSIZE);imshow(src4 , src4);Mat src5 imread(1.jpg, IMREAD_ANYCOLOR);namedWindow(src5, WINDOW_AUTOSIZE);imshow(src5, src5);Mat src6 imread(1.jpg, IMREAD_LOAD_GDAL);namedWindow(src6, WINDOW_AUTOSIZE);imshow(src6 , src6);Mat src7 imread(1.jpg, IMREAD_REDUCED_GRAYSCALE_2);namedWindow(src7, WINDOW_AUTOSIZE);imshow(src7, src7);Mat src8 imread(1.jpg, IMREAD_REDUCED_COLOR_2);namedWindow(src8, WINDOW_AUTOSIZE);imshow(src8, src8);Mat src9 imread(1.jpg, IMREAD_REDUCED_GRAYSCALE_4);namedWindow(src9, WINDOW_AUTOSIZE);imshow(src9, src9);Mat src10 imread(1.jpg, IMREAD_REDUCED_COLOR_4);namedWindow(src10, WINDOW_AUTOSIZE);imshow(src10, src10);Mat src11 imread(1.jpg, IMREAD_REDUCED_GRAYSCALE_8);namedWindow(src11, WINDOW_AUTOSIZE);imshow(src11, src11);Mat src12 imread(1.jpg, IMREAD_REDUCED_COLOR_8);namedWindow(src12, WINDOW_AUTOSIZE);imshow(src12, src12);Mat src13 imread(1.jpg, IMREAD_IGNORE_ORIENTATION);namedWindow(src13, WINDOW_AUTOSIZE);imshow(src13, src13);moveWindow(src1, 10, 50);moveWindow(src2, 10, src1.rows 100);moveWindow(src3, src1.cols 10, 50);moveWindow(src4, src1.cols 10, src1.rows 100);moveWindow(src5, src1.cols * 2 10, 50);moveWindow(src6, src1.cols * 2 10, src1.rows 100);moveWindow(src7, src1.cols * 3 10, 50);moveWindow(src8, src1.cols * 3 10, src1.rows 100);moveWindow(src9, src1.cols * 4 10, 50);moveWindow(src10, src1.cols * 4 10, src1.rows 100);moveWindow(src11, src1.cols * 5 10, 50);moveWindow(src12, src1.cols * 5 10, src1.rows 100);moveWindow(src13, src1.cols * 6 10, 50);imwrite(1.bmp, src2);*/VideoCapture cp;Mat frCamera;cp.open(0);if (!cp.isOpened())cout Camera Cannt be opened! endl;else{cp frCamera;imshow(Camera Image, frCamera);}waitKey(0); // wait till any key is pressedreturn 0;
} 试运行 按CtrlF5结果如下 可以看出摄像头抓取的图片已传入Mat对象并显示在窗口中。