【发布时间】:2019-01-30 05:47:45
【问题描述】:
public void searchIMG(Bitmap screen_img, Bitmap find_img)
{
//스크린 이미지 선언
//using (Mat ScreenMat = OpenCvSharp.Extensions.BitmapConverter.ToMat(screen_img))
Mat ScreenMat = OpenCvSharp.Extensions.BitmapConverter.ToMat(screen_img);
//찾을 이미지 선언
Mat FindMat = OpenCvSharp.Extensions.BitmapConverter.ToMat(find_img);
FindMat.ConvertTo(FindMat, MatType.CV_8UC4);
//스크린 이미지에서 FindMat 이미지를 찾아라
using (Mat res = ScreenMat.MatchTemplate(FindMat, TemplateMatchModes.CCoeffNormed))
{
//찾은 이미지의 유사도를 담을 더블형 최대 최소 값을 선언합니다.
double minval, maxval = 0;
//찾은 이미지의 위치를 담을 포인트형을 선업합니다.
OpenCvSharp.Point minloc, maxloc;
//찾은 이미지의 유사도 및 위치 값을 받습니다.
Cv2.MinMaxLoc(res, out minval, out maxval, out minloc, out maxloc);
Debug.WriteLine("찾은 이미지의 유사도 : " + maxval);
//이미지를 찾았을 경우 클릭이벤트를 발생!!
int offsetY = 35;
if (maxval >= 0.8)
{
InClick(maxloc.X + FindMat.Width / 2, maxloc.Y + FindMat.Height / 2 - offsetY);
}
}
}
首先,对不起,我的英语不好
当我执行这个程序时,就会发生这样的异常 exception
所以我像这样调试并检查不同的频道 defferent channel
我认为不同的 (CV_8UC4 with ScreenMat) 和 (CV_8UC3 with FindMat) 发生异常
所以我想将 FindMat 的频道更改为 CV_8UC4
我尝试谷歌搜索并应用 FindMat.ConvertTo 但不应用
所以...我找不到更改频道方法
所以请帮帮我,我该如何更改 FindMat 频道
如果您想查看完整源代码,请点击下方
http://colorscripter.com/s/z8EhVR5
感谢您阅读我的问题,如果可以的话,请指出我错误的英语
【问题讨论】:
-
要更改通道数,您可以使用拆分和合并功能或 cvtColor(例如,如果您想从 3 个通道更改为 4 个通道,则使用 BGR2BGRA)。
-
我找到了解决方案,问题是位图像素格式不同,所以我插入 Bitmap clone = new Bitmap(find_img.Width, find_img.Height,System.Drawing.Imaging.PixelFormat.Format32bppArgb);并解决了!
-
坦克你这么多