- OpenCvSharp安装(一)
- OpenCvSharp读取、显示和写入图像(二)
- OpenCvSharp图像裁剪、调整大小、旋转、透视(三)
- OpenCvSharp基本绘画(直线、椭圆、矩形、圆、多边形、文本)(四)
- OpenCvSharp 检测(斑点检测、边缘检测、轮廓检测)(五)
- OpenCvSharp 轮廓绘制六步骤(六)
- OpenCvSharp 目标检测五个步骤(七)
- OpenCvSharp透视矫正六步骤(八)
一 、OpenCvSharp安装
- 通过NuGet安装,之前本人使用的是这个
- C#使用OpenCV的一些代码
需要加头文件
using OpenCvSharp; //为了使用opencv
using Point = OpenCvSharp.Point; //为了确定我们使用的point是opencv的而不是draw的
二 、读取、显示和写入图像
- imread()读取图像
- imshow()在窗口中显示图像
- imwrite()将图像保存到文件目录里
1、imread()读取图像
cv.imread(filename[, flags])
ImreadModes.Color:
始终将图像转换为 3 通道BGR彩色图像,默认方式ImreadModes.Grayscale:
始终将图像转换为单通道灰度图像ImreadModes.Unchanged:
按原样返回加载的图像(使用Alpha通道)ImreadModes.AnyDepth:
在输入具有相应深度时返回16位/ 32位图像,否则将其转换为8位ImreadModes.AnyColor:
以任何可能的颜色格式读取图像
2、imshow()在窗口中显示图像
- Cv2.ImShow(filename, img);
- Cv2.WaitKey(0);
它会在窗口上等待指定的毫秒数,如果期间没有按下任何键,则返回-1。如果按下了任何键,则返回按键的ASCII码值。该函数通常与cv2.imshow()一起使用,以便在窗口中显示图像并等待用户按下键盘。
3、ImWrite()将图像写入文件
- imwrite(filename, image).
第一个参数是文件名,它必须包含文件扩展名(例如 .png、.jpg 等)。OpenCV 使用此文件扩展名来指定文件的格式。
第二个参数是要保存的图像。如果图像保存成功,该函数将返回True
三 、图像裁剪、调整大小、旋转、透视
1、图像裁剪
- Rect rect = new Rect(x, y, width, height);
// x, y 为起始坐标,width, height 为裁剪宽高
2、调整图像大小
Cv2.Resize(src,OutputArray dst, Size dsize, double fx=0, double fy=0, int interpolation=INTER_LINEAR );
dsize
输出图像的大小。如果这个参数不为0,那么就代表将原图像缩放到这个Size(width,height)指定的大小;如果这个参数为0,那么原图像缩放之后的大小就要通过下面的公式来计算:
dsize = Size(round(fxsrc.cols), round(fysrc.rows))
其中,fx和fy就是下面要说的两个参数,是图像width方向和height方向的缩放比例。fx:width方向的缩放比例,如果它是0,那么它就会按照(double)dsize.width/src.cols来计算;
fy:height方向的缩放比例,如果它是0,那么它就会按照(double)dsize.height/src.rows来计算;
interpolation
这个是指定插值的方式,图像缩放之后,肯定像素要进行重新计算的,就靠这个参数来指定重新计算像素的方式
3、图片旋转
- 左旋转90°
Cv2.Rotate(src, dst, RotateFlags.Rotate90CounterClockwise); - 右旋转90°
Cv2.Rotate(src, dst, RotateFlags.Rotate90Clockwise); - 旋转180°
Cv2.Rotate(src, dst, RotateFlags.Rotate180); - 垂直翻转
Cv2.Flip(src, dst, FlipMode.Y); - 水平翻转
Cv2.Flip(src, dst, FlipMode.X); - 任意角度旋转
Cv2.WarpAffine(
InputArray src, // 输入图像
OutputArray dst, // 输出图像
InputArray M, // 旋转矩阵
Size dsize, // 输出图像大小
int flags = INTER_LINEAR, // 像素插值方式
int borderMode = BORDER_CONSTANT, // 背景填充默认为常量
const Scalar & borderValue = Scalar() // 填充颜色默认为黑色
) - 图像透视
Cv2.GetAffineTransform(srcPoints, dstPoints);
参数
src: 代表输入图像的三个点坐标, 形为:[[col_1, row_1], [col_2, row_2], [col_3, row_3]]
dst: 代表输出图像的三个点坐标, 形为:[[col_4, row_4], [col_5, row_5], [col_6, row_6]]
点1 由位置 [col_1, row_1] 移动到 [col_4, row_4]
点2 由位置 [col_2, row_2] 移动到 [col_5, row_5]
点3 由位置 [col_3, row_3] 移动到 [col_6, row_6]
参考
李建军的博客:https://blog.csdn.net/hb_ljj/article/details/135038353