得鹿梦鱼 得鹿梦鱼

基本图像操作

数字图像是机器视觉应用的主要处理对象,而视频是由连续的图像构成的,

读取和显示以及存储图像

openCV中的HightGUI模块提供了读取不同类型图像,视频和相机的接口

using OpenCvSharp;/*  * 读取图片 * @param string fileName 图像文件名 * @param ImreadModes flag 读取时采用的色彩模式 * @return Mat */Mat img = Cv2.ImReadstring path, ImreadModes flag;//获取图片的尺寸Size img.Size/**  * 显示图片 * @param string fileName 图像文件名 * @param Mat data 读取时采用的色彩模式 */Cv2.ImShowstring fileName, Mat data;/** * 等待按键响应 * 为了方便显示窗口查阅,等待按键响应后再退出图片查看 */Cv2.waitKeyint delay = 0;/**  * 写入图片 * @param string fileName 图像文件名 * @param Mat data 读取时采用的色彩模式 */Cv2.ImWritestring fileName, Mat data;/**  * 销毁所有的窗口 * 可以忽略,OpenCV自行处理 */Cv2.DestroyAllWindows;

效果图

颜色空间转换

更多内容请查看

注意: openCV的RGB颜色通道顺序为BGR即蓝色、绿色和红色

using OpenCvSharp;/**  * 颜色转化 * @param Mat src 输入图 * @param Mat dst 输出图 * @code int 颜色转化码值 * @dstCn int 目标函数的通道图 */Cv2.cvtColorMat src , Mat dst, int code, int destCn;

效果图

图像的几何变换

坐标变换

内容请参考几何变换

using OpenCvSharp;/**  * 尺寸变换 * @param Mat src 输入图 * @param Mat dst 输出图 * @param Size dsize 输出图的大小,如果为0,则根据原图和缩放倍数计算 * @param double fx 水平缩放因子 * @param double fy 垂直缩放因子 * @param interpolationint 差值算法,包括Nearest 最近邻值插值算法、Linear 线性插值 */Cv2.ResizeMat src, Mat dest, Size dsize, double fx , double fy, int interpolation

尺寸变换

using OpenCvSharp;/**  * 仿射变换 * @param Mat src 输入图 * @param Mat dst 输出图 * @param InputArray M 2*3的矩阵 * @param Size dsize 输出图的大小,如果为0,则根据原图和缩放倍数计算 * @param int flag 插值算法 * @param int borderMode 边界填充方式 */Cv2.WarpAffineMat src, Mat dest, InputArray M,Size dsize, int flag , int borderMode

仿射变换

平移变换

灰度内插

对空间变换后的像素赋予灰度值
内插是用已知数据估计未知位置的数据,常见的差值算法有最临近值插值、双线性插值、二次立方插值和三次方插值等

例如:2个像素×2个像素2个像素 \times 2个像素的原始灰度为

[50100150200]\begin{bmatrix}50 & 100 \\150 & 200\end{bmatrix}

使用最邻近插值放大2倍后为

[50501001005050100100150150200200150150200200]\begin{bmatrix}50 & 50 & 100 & 100 \\50 & 50 & 100 & 100 \\150 & 150 & 200 & 200 \\150 & 150 & 200 & 200\end{bmatrix}

使用双线性插值

[5063881007588113125125138163175150163188200]\begin{bmatrix}50 & 63 & 88 & 100 \\75 & 88 & 113 & 125 \\125 & 138 & 163 & 175 \\150 & 163 & 188 & 200\end{bmatrix}

直方图均衡化

理论部分请参考文章

直方图均衡化

文字标注

using OpenCvSharp;Cv2.PutText;Cv2.Circle;Cv2.Ellipse;Cv2.RectRange;Cv2.Line;

视频操作

如果说单张图片是二维数据,则视频是三维数据,它增加了时间维度z;

using OpenCvSharp;VideoCapture cap = Cv2.VideoCapture;cap.open;Cv2.WriteVideo;Cv2.RectRange;Cv2.Line;