Commit b4bf8113 SK

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

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