c# OpenCV cv2.resize
时间: 2023-12-21 16:30:58 浏览: 182
以下是使用c# OpenCV中的cv2.resize函数进行图像缩放的示例代码:
```csharp
using OpenCvSharp;
using System;
class Program
{
static void Main()
{
Mat img = Cv2.ImRead("lena.png");
Console.WriteLine(img.Size());
int cols = img.Cols;
int rows = img.Rows;
Size size = new Size((int)(cols * 0.9), (int)(rows * 0.5));
Mat rst = new Mat();
Cv2.Resize(img, rst, size);
Console.WriteLine("img.Size=" + img.Size());
Console.WriteLine("rst.Size=" + rst.Size());
Cv2.ImShow("img", img);
Cv2.ImShow("rst", rst);
Cv2.WaitKey(0);
Cv2.DestroyAllWindows();
}
}
```
相关问题
C# opencv
C#使用OpenCV的一些代码如下:
1. 需要加头文件
```csharp
using OpenCvSharp;
```
2. 读取图片
```csharp
Mat img1 = new Mat("F:\\all_truck\\truck_3.jpg", ImreadModes.Color);
Cv2.ImShow("win1", img1);
Cv2.WaitKey(0);
```
3. 定义一个没有初始化的图片作为复制
```csharp
Mat pBkImage_copy = new Mat();
pBkImage.CopyTo(pBkImage_copy);
```
4. 灰度化
```csharp
Cv2.CvtColor(img1, img1, ColorConversionCodes.BGR2GRAY);
```
5. 高斯模糊和size数据格式的定义
```csharp
Size ksize = new Size(5, 5);
Cv2.GaussianBlur(img1, img1, ksize, 0);
```
6. 二值化
```csharp
Cv2.Threshold(img1, img1, 128, 255, ThresholdTypes.Binary);
```
7. 开闭运算
```csharp
Mat kernel = Cv2.GetStructuringElement(MorphShapes.Rect, new Size(3, 3));
Cv2.MorphologyEx(img1, img1, MorphTypes.Open, kernel);
```
8. FindContours查找轮廓和contours参数的定义和操作
```csharp
Point[][] contours;
HierarchyIndex[] hierarchy;
Cv2.FindContours(img1, out contours, out hierarchy, RetrievalModes.External, ContourApproximationModes.ApproxSimple);
```
9. Rect和Size格式的定义
```csharp
Rect rect = Cv2.BoundingRect(contours[0]);
Size size = new Size(rect.Width, rect.Height);
```
10. resize函数在图片上画矩形框在图片上画直线
```csharp
Cv2.Rectangle(img1, rect, Scalar.Red, 2);
Cv2.Line(img1, new Point(0, 0), new Point(img1.Width, img1.Height), Scalar.Blue, 2);
```
C# opencv 无损缩略图
在C#中,OpenCV是一个强大的计算机视觉库,但它本身并不直接提供无损缩略图的功能。如果你想创建无损缩略图,通常需要借助于OpenCV提供的图像处理操作,然后结合其他库如SharpCompress或ImagingMagick等。
以下是一个基本步骤概述:
1. **读取原始图片**:首先,使用OpenCV的`cv2.imread()`函数加载原图。
```csharp
using System.Drawing.Imaging;
Mat img = Cv2.ImRead("original.jpg", ImreadModes.Color);
```
2. **裁剪或调整大小**:使用`Mat`的resize或Clone方法对图像进行缩放,尽量保持质量不变。
```csharp
Mat thumb = new Mat();
Cv2.Resize(img, thumb, new Size(width, height), InterpolationFlags.NearestNeighbour); // 使用最接近像素的方式,减少失真
```
3. **保存缩略图**:将裁剪后的图像转换成`System.Drawing.Bitmap`,以便使用无损压缩库进行保存。
```csharp
Bitmap bitmapThumb = Bitmap.FromMatrix(thumb);
byte[] data = ImageUtils.GetByteArray(bitmapThumb, ImagingFormat.Jpeg);
File.WriteAllBytes("thumbnail.jpg", data);
```
这里`ImageUtils.GetByteArray`是自定义的一个方法,它会把位图转换为字节数组,并选择无损的JPEG格式(例如通过`Bitmap.Save`并指定`EncoderParameters`)。
请注意,虽然这可以生成一个看起来像是无损的缩略图,实际上JPEG压缩总是有损的。如果需要完全无损的缩略图,你可能需要考虑其他格式如PNG,但这可能会增加文件大小。
阅读全文