vosk-server
vosk-server copied to clipboard
Why is the image merge area white
I don't know why two pictures merged, the overlapping area is white
I hope the teacher can give me a solution
this my scripts:
private void WarpTriangle(Mat img1, Mat img2, List<Point2f> tri1, List<Point2f> tri2, Point2f[] _points2f)
{
(List<List<Point2f>> inputPoints, List<List<Point2f>> keyPoints) = this.Init(_points2f);
for (int i = 0; i < inputPoints.Count; i++) //遍历每个点
{
tri1 = keyPoints[i]; //一个点就是一个三角形像素
tri2 = inputPoints[i];
OpenCvSharp.Rect r1 = Cv2.BoundingRect(tri1);
OpenCvSharp.Rect r2 = Cv2.BoundingRect(tri2);
List<Point2f> tri1Cropped = new List<Point2f>(), tri2Cropped = new List<Point2f>();
List<Point> tri2CroppedInt = new List<Point>();
for (int ii = 0; ii < 3; ii++)
{
tri1Cropped.Add(new Point2f(tri1[ii].X - r1.X, tri1[ii].Y - r1.Y));
tri2Cropped.Add(new Point2f(tri2[ii].X - r2.X, tri2[ii].Y - r2.Y));
// fillConvexPoly needs a vector of Point and not Point2f
tri2CroppedInt.Add(new Point(Mathf.Floor(tri2[ii].X - r2.X), Mathf.Floor(tri2[ii].Y - r2.Y)));
}
Mat img1Cropped = new Mat();
img1Cropped = img1.GetRectSubPix(r1.Size, r1.Center);
Mat warpMat = Cv2.GetAffineTransform(tri1Cropped, tri2Cropped);
Mat img2Cropped = Mat.Zeros(size, size, img1Cropped.Type());
Cv2.WarpAffine(img1Cropped, img2Cropped, warpMat, img2Cropped.Size(), InterpolationFlags.Linear, BorderTypes.Reflect101);
Mat mask = Mat.Zeros(size, size, MatType.CV_32FC3);
Cv2.FillConvexPoly(mask, tri2CroppedInt, new Scalar(1.0, 1.0, 1.0), LineTypes.AntiAlias, 0);
Cv2.Multiply(img2Cropped, mask, img2Cropped);
//Mat matOut = Mat.Zeros(new Size(size, size), img1.Type());
//Cv2.Add(matOut, img2Cropped, matOut);
float tx = tri2.Min(x => x.X);
float ty = tri2.Min(y => y.Y);
float[] warp_values = { 1.0f, 0.0f, tx, 0.0f, 1.0f, ty }; //图片偏移
Mat translation_matrix = new Mat(2, 3, MatType.CV_32F, warp_values);
Cv2.WarpAffine(img2Cropped, img2Cropped, translation_matrix, new Size(size, size));
Cv2.Multiply(img2Cropped, new Scalar(1.0, 1.0, 1.0) - mask, img2Cropped);
Cv2.Add(img2, img2Cropped, img2);
//float tx = tri2.Min(x => x.X);
//float ty = tri2.Min(y => y.Y);
//create the translation matrix using tx and ty
//float[] warp_values = { 1.0f, 0.0f, tx, 0.0f, 1.0f, ty }; //图片偏移
//Mat translation_matrix = new Mat(2, 3, MatType.CV_32F, warp_values);
//Cv2.WarpAffine(matOut, matOut, translation_matrix, new Size(size, size));
//Cv2.Add(img2, matOut, img2);
}
Cv2.Flip(img2, img2, FlipMode.X); //图片翻转
Cv2.ImShow("outPut", img2);
//img2.ConvertTo(img2, MatType.CV_8UC3, 255.0);
//Texture2D _tex = Unity.MatToTexture(img2);
//byte[] bytes = _tex.EncodeToPNG();
//System.IO.File.WriteAllBytes(Application.streamingAssetsPath + "/Texture/SavedScreen.png", bytes);
Debug.Log("输出图像");
}
Dear @wizVR-zhangjun, you posted image to the wrong project it seems