Opencv计算机视觉编程攻略-第一节 图像读取与基本处理

1. 图像读取

导入依赖项的h文件

cpp 复制代码
#include <iostream>

#include <opencv2/core.hpp>
#include <opencv2/highgui.hpp>
#include <opencv2/imgproc.hpp>
项目 Value
core.hpp 基础数据结构和操作(图像存储、矩阵运算、文件 I/O)
highgui.hpp 图像显示、窗口管理、用户交互(图像/视频显示、用户输入处理、结果保存)
imgproc.hpp 图像处理算法(图像滤波、几何变换、边缘检测、形态学操作)

二 读取图片

cpp 复制代码
Mat image; // 图像矩阵
std::cout << "This image is " << image.rows << " x "
	<< image.cols << std::endl;
// read the input image as a gray-scale image
image = cv::imread("E:/CODE/images/puppy.bmp", cv::IMREAD_GRAYSCALE);

cv::IMREAD_GRAYSCALE 以灰度图 ,默认是彩色图

1. Mat 常见操作

cpp 复制代码
//创建Mat图像矩阵 CV_8U CV_8UC3 参数对应位数 通道数
Mat image1(240, 320, CV_8U, 100); 
//100 为默认值,三通道使用cv::Scalar(0, 0, 255)
//图像直接复制
image3.copyTo(image2);
//图像对象直接继承
Mat image4(image3);
// 图像对象格式转换
image1.convertTo(image2, CV_32F, 1 / 255.0, 0.0);
// 获取mat块某一片区域
image=  cv::imread("puppy.bmp");
// define image ROI at image bottom-right
imageROI= image(cv::Rect(image.cols-logo.cols,image.rows-logo.rows,
	                     logo.cols,logo.rows));
 // use the logo as a mask (must be gray-level)
 cv::Mat mask(logo);

// insert by copying only at locations of non-zero mask 0值区域为透明
logo.copyTo(imageROI,mask);

2. Matx 矩阵计算

cpp 复制代码
	// a 3x3 matrix of double-precision
	cv::Matx33d matrix(3.0, 2.0, 1.0,
		2.0, 1.0, 3.0,
		1.0, 2.0, 3.0);
	// a 3x1 matrix (a vector)
	cv::Matx31d vector(5.0, 1.0, 3.0);
	// multiplication
	cv::Matx31d result = matrix * vector;

三 窗口响应函数

下列函数实现opencv窗口的点击事件监听

cpp 复制代码
void onMouse(int event, int x, int y, int flags, void* param) {

	Mat* im = reinterpret_cast<Mat*>(param);
	switch (event) {	// dispatch the event
	case cv::EVENT_LBUTTONDOWN: // mouse button down event
	// display pixel value at (x,y)
	cout << "at (" << x << "," << y << ") value is: "
		<< static_cast<int>(im->at<uchar>(cv::Point(x, y))) << std::endl;
	break;
	}
}

将监听函数绑定到窗口

cpp 复制代码
	namedWindow("Original Image"); // define the window (optional)
	imshow("Original Image", image); // show the image
	// 绑定点击事件
	setMouseCallback("Original Image", onMouse, reinterpret_cast<void*>(&image));

四 图像绘制内容

cpp 复制代码
flip(image, result, 1); // 图像翻转
// 0 for vertical,                     
// negative for both
// 保存位图
imwrite("output.bmp", result); // save result

// 在image中画圆
cv::circle(image,              // destination image 
	cv::Point(155, 110), // center coordinate
	65,                 // radius  
	0,                  // color (here black)
	3);                 // thickness
// 在图像上写字
cv::putText(image,                   // destination image
	"This is a dog.",        // text
	cv::Point(40, 200),       // text position
	cv::FONT_HERSHEY_PLAIN,  // font type
	2.0,                     // font scale
	255,                     // text color (here white)
	2);                      // text thickness
相关推荐
EDPJ5 小时前
当图像与文本 “各说各话” —— CLIP 中的模态鸿沟与对象偏向
深度学习·计算机视觉
charlee446 小时前
最小二乘问题详解17:SFM仿真数据生成
c++·计算机视觉·sfm·数字摄影测量·无人机航测
Fleshy数模6 小时前
OpenCV 实时人脸检测实战:从视频文件到人脸框标注
人工智能·opencv·计算机视觉
龙文浩_7 小时前
AI人工神经网络核心原理与深度学习机制解析
人工智能·深度学习·神经网络
AI医影跨模态组学7 小时前
J Immunother. Cancer(IF=10.6)南方医科大学南方医院等团队:基于病理组学的集成模型在胃癌免疫治疗反应预测中的开发与解读
人工智能·深度学习·机器学习·论文·医学·医学影像
补三补四7 小时前
参数高效微调技术详解:理论基础与实践应用
人工智能·深度学习·机器学习
Omics Pro9 小时前
虚拟细胞:开启HIV/AIDS治疗新纪元的关键?
大数据·数据库·人工智能·深度学习·算法·机器学习·计算机视觉
专业发呆业余科研11 小时前
深度学习的隐形支架:对称性与不变性的架构统一论
人工智能·深度学习·神经网络·机器学习
雷帝木木11 小时前
Python 数据库 ORM 实战:SQLAlchemy 详解
人工智能·python·深度学习·机器学习
卡梅德生物科技小能手12 小时前
生物制药靶点深度解析:CD37(四跨膜蛋白)的作用机制与药物研发技术前沿
经验分享·深度学习·生活