使用OpenCVForUnity分割图片
2017-12-29 14:03
330 查看
最近的一个需求,引申出对图片裁切、拼接、矫正相关的系列需求,不知不觉已经使用了4-5种方法。如unity的GetPixels32(),SetPixels32()有512*512的尺寸限制问题,如C#中的system.drawing有跨平台的问题等。最终感觉使用opencv是综合效果最好的一种选择。今次实例如图,把原图按中心十字裁切成4张新图,显示在4个新的Image上。
using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.UI; using OpenCVForUnity; public class CropTexture2D : MonoBehaviour { public Mat mat; public Texture2D source; public Texture2D[] result = new Texture2D[4]; public RawImage[] output = new RawImage[4]; void Start() { int width = source.width; int height = source.height; //Debug.Log(width + "*" + height); // 256*256, 打印查看一下图片尺寸 //rows 是行数,对应height //cols 是列数,对应width mat = new Mat(height, width, CvType.CV_8UC3); // Mat对象尺寸要和Texture2d一样 Utils.texture2DToMat(source, mat); for (int i = 0; i < 2; i++) { for (int t = 0; t < 2; t++) { int id = i * 2 + t; Debug.Log("[顺序]" + (id)); //0->1->2->3 // 按output数组中的顺序,裁切并赋予新图片 OpenCVForUnity.Rect rectCrop = new OpenCVForUnity.Rect(width / 2 * t, height / 2 * i, width / 2, height / 2); // 调试小心,超出取值范围,unity会奔溃 Mat croppedImage = new Mat(mat, rectCrop); result[id] = new Texture2D(croppedImage.width(), croppedImage.height()); // Texture2d尺寸也要和Mat一样 Utils.matToTexture2D(croppedImage, result[id]); output[id].texture = result[id]; } } } }
相关文章推荐
- 使用OpenCV把视屏分割成图片
- 使用OpenCVForUnity拼接图片
- python 使用opencv 把视频 分割成图片
- OpenCV拼图(多种形式,封装,使用,包括图片越界及缩放)
- Python OpenCV学习笔记之:使用Grabcut算法进行图像背景和前景分割
- OpenCV 2 学习笔记(25): 使用分水岭分割图像
- 使用openCV查看png图片的各通道值
- 使用PHP写了一个图片分割等份工具,便于前台页面切图时使用。
- 使用python编写opencv程序(2、查看图片各种属性,写入图片)
- OPENCV图像边缘查找与分割技术在android中使用汇总
- 图像分割之(四)OpenCV的GrabCut函数使用和源码解读
- Android使用OpenCV合成双目裸眼3D图片(推荐Native方法)
- 使用 OpenCV 得到图片线稿
- 使用OpenCV合成两张图片
- vs2010使用openCV中的imread读不到图片问题的解决方法
- 使用OpenCV实现WebCam摄像头保存JPEG图片
- Android平台下使用OpenCV灰度化图片的两种方式
- OpenCV入门九:使用findContours()查找图片轮廓线,并将轮廓线坐标点输出
- 图像分割之(四)OpenCV的GrabCut函数使用和源码解读
- 使用Qt显示openCV矩阵图片