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
我认为(带有ScreenMat的CV_8UC3)和(带有FindMat的CV_8UC3)会出现异常
所以我想将FindMat的频道更改为CV_8UC4
我尝试使用谷歌搜索并应用FindMat.ConvertTo,但不应用
所以...我找不到更改频道方法
所以请帮助我,如何更改FindMat频道
如果您想查看完整来源,请点击下面
http://colorscripter.com/s/z8EhVR5
感谢您阅读我的问题,并请指出我的英文错误
答案 0 :(得分:1)
我找到了解决方案!!
问题是位图像素格式不同 所以我插入
位图克隆=新位图(find_img.Width,find_img.Height,System.Drawing.Imaging.PixelFormat.Format32bppArgb);
解决了!
public void searchIMG(Bitmap screen_img, Bitmap find_img)
{
Bitmap clone = new Bitmap(find_img.Width, find_img.Height,System.Drawing.Imaging.PixelFormat.Format32bppArgb);
//스크린 이미지 선언
//using (Mat ScreenMat = OpenCvSharp.Extensions.BitmapConverter.ToMat(screen_img))
Mat ScreenMat = OpenCvSharp.Extensions.BitmapConverter.ToMat(screen_img);
//찾을 이미지 선언
Mat FindMat = OpenCvSharp.Extensions.BitmapConverter.ToMat(clone);
FindMat.ConvertTo(FindMat, MatType.CV_8UC4);
FindMat.ExtractChannel(1);
Debug.WriteLine(FindMat.GetType());
//스크린 이미지에서 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);
}
}
}