Commit b4bf8113 SK

执行时传大图,返回切割后的小图

1 个父辈 3324a83b
......@@ -48,10 +48,10 @@ namespace AOI
Image standardRoiImg = GetRoiImage(standardImage, needCut);
resultBean.standardRoiImage = standardRoiImg;
Image currentRoiImg = GetRoiImage(imageToCheck, needCut);
resultBean.currentRoiImage = currentRoiImg;
Image cutImg;
int num = GetBlobNum(currentRoiImg, out Image dstImg, out List<CvBlob> blobList);
int num = GetBlobNum(imageToCheck, out cutImg, out Image dstImg, out List<CvBlob> blobList);
resultBean.currentRoiImage = cutImg;
bool result = false;
if (num > minNum)
{
......@@ -71,13 +71,17 @@ namespace AOI
/// <summary>
/// 对源图像进行二值化,找出所有Blob后,根据minArea和maxArea过滤Blob后的数量
/// </summary>
/// <param name="srcImg">原始图片</param>
/// <param name="dstImg">二值化后的图片</param>
/// <param name="img">相机获取的大图</param>
/// <param name="cutImg">从大图中切割后的原图</param>
/// <param name="dstCutImg">切割并处理后的图片</param>
/// <param name="blobList">所有的Blob</param>
/// <returns>过滤后的Blob数量</returns>
public int GetBlobNum(Image srcImg, out Image dstImg, out List<CvBlob> blobList)
public int GetBlobNum(Image srcImg, out Image cutImg, out Image dstCutImg, out List<CvBlob> blobList)
{
Mat srcMat = ImageUtil.ToMat(srcImg);
bool needCut = true;
cutImg = GetRoiImage(srcImg, needCut);
Mat srcMat = ImageUtil.ToMat(cutImg);
Mat threshMat = new Mat();
Cv2.CvtColor(srcMat, threshMat, ColorConversionCodes.RGB2GRAY);
ThresholdTypes threshType = ThresholdTypes.Binary;
......@@ -96,7 +100,7 @@ namespace AOI
CvBlobs blobs = new CvBlobs();
blobs.Label(threshMat);
blobList = blobs.Values.ToList();
dstImg = ImageUtil.ToImage(threshMat);
dstCutImg = ImageUtil.ToImage(threshMat);
List<CvBlob> resultBlobs = blobList.Where(b => {
if (b.Area > minArea)
{
......
......@@ -35,9 +35,9 @@ namespace AOI
Image standardRoiImg = GetRoiImage(standardImage, needCut);
resultBean.standardRoiImage = standardRoiImg;
Image currentRoiImg = GetRoiImage(imageToCheck, needCut);
resultBean.currentRoiImage = currentRoiImg;
float rate = GetRate(currentRoiImg, out Image dstImg);
Image cutImg;
float rate = GetRate(imageToCheck, out cutImg, out Image dstImage);
resultBean.currentRoiImage = cutImg;
bool result = false;
if(rate >= minRate && rate <= maxRate)
......@@ -48,15 +48,22 @@ namespace AOI
return resultBean;
}
public float GetRate(Image img, out Image dstImg)
/// <summary>
/// 获取像素占比
/// </summary>
/// <param name="img">相机获取的大图</param>
/// <param name="cutImg">从大图中切割后的原图</param>
/// <param name="dstCutImg">切割并处理后的图片</param>
/// <returns></returns>
public float GetRate(Image img, out Image cutImg, out Image dstCutImg)
{
float percent = 0;
dstImg = null;
dstCutImg = null;
bool needCut = true;
Image currentRoiImg = GetRoiImage(img, needCut);
if (currentRoiImg != null)
cutImg = GetRoiImage(img, needCut);
if (cutImg != null)
{
Mat originalRoiMat = ImageUtil.ToMat(currentRoiImg);
Mat originalRoiMat = ImageUtil.ToMat(cutImg);
Mat roiMat = new Mat();
Cv2.CvtColor(originalRoiMat, roiMat, ColorConversionCodes.BGRA2BGR);
......@@ -69,8 +76,8 @@ namespace AOI
Scalar maxScalar = Scalar.FromRgb(maxR, maxG, maxB);
Cv2.InRange(roiMat, minScalar, maxScalar, dst);
int count = Cv2.CountNonZero(dst);
originalRoiMat.CopyTo(dst, dst);
dstImg = ImageUtil.ToImage(dst);
roiMat.CopyTo(dst, dst);
dstCutImg = ImageUtil.ToImage(dst);
//计算总像素
minScalar = Scalar.FromRgb(1, 1, 1);
......
......@@ -62,11 +62,12 @@ namespace AccAOI.control
private void UpdateImage()
{
GetAoiInfo();
Image outImage = null;
float rate = methodRgb.GetRate(BaseImage, out outImage);
Image cutImg = null;
Image dstCutImg = null;
float rate = methodRgb.GetRate(BaseImage, out cutImg, out dstCutImg);
txtRate.Text = rate.ToString();
this.aoiImage.Image = outImage;
this.aoiImage.Image = cutImg;
}
private void btnUpdate_Click(object sender, EventArgs e)
......
支持 Markdown 格式
你添加了 0 到此讨论。请谨慎行事。
Finish editing this message first!