OpenCV中使用halcon中Region的概念

        之前一直使用Halcon12作为开发的软件,确实在机器视觉工业化开发上速度飞快,不过有许多算法还是不得不自己写,所以还是要用到openCV。一开始转openCV最不适应的就是Region这个部分,Halcon中Region对象的使用非常简便,而还在入门的我一直不知道如何处理Halcon算法移植到openCV过程中Region的处理,最近稍微一些眉目,稍作分享,或者如果openCV有什么更直接的方法可以请各位留言分享一下。

       下面是一个寻找圆轮廓的小程序,通过霍夫圆变换可以找到目标圆,进一步通过绘制掩膜的方法得到想要的Region,即将openCV中掩膜的概念与Halcon中region的概念可以等同起来,就可以进行Halcon中相应的reduce_domain,select_shape等操作。要注意三通道的图片copyTo到单通道的掩膜上时会出现一些小问题。



// opencv.cpp : 定义控制台应用程序的入口点。

#include "StdAfx.h"
#include 
#include 
#include 
#include 
#include 
using namespace cv;
using namespace std;
#define WINDOW_NAME "[程序窗口]"
#define WINDOW_WIDTH 600
#include
#include
#include
#include
#include

Mat g_srcImage, g_dstImage, g_grayImage,g_midImage;
//掩膜
Mat hole;
//掩膜区域对应图像
Mat crop;
//霍夫圆变换检测的圆参数
vector circles;
int main()
{
	g_srcImage = imread("6.jpg");
	imshow("原图", g_srcImage);
	cvtColor(g_srcImage, g_midImage, COLOR_BGR2GRAY);
	cvtColor(g_srcImage, g_grayImage, COLOR_BGR2GRAY);

	GaussianBlur(g_midImage, g_midImage, Size(9, 9), 2, 2);
	HoughCircles(g_midImage, circles, HOUGH_GRADIENT, 1.5, 10, 200, 50, 0, 0);
	hole = Mat(g_midImage.size(), CV_8U, Scalar(0));
	crop = Mat(g_midImage.rows, g_midImage.cols, CV_8UC3);
	for (size_t i = 0; i < circles.size(); i++)
	{
		Point center(cvRound(circles[i][0]), cvRound(circles[i][1]));
		int radius = cvRound(circles[i][2]);
		circle(hole, center, radius, Scalar(155, 50, 255), -1, 8, 0);
	}
	imshow("霍夫圆区域掩膜", hole);//显示掩膜
	g_srcImage.copyTo(crop, hole);//将三通道原图像拷贝进遮罩图层 
	imshow("霍夫圆区域三通道图像", crop);
	g_grayImage.copyTo(crop, hole);//将单通道原图像拷贝进遮罩图层 
	imshow("霍夫圆区域单通道图像", crop);
	waitKey(0);
	return 0;
}


采用图片

OpenCV中使用halcon中Region的概念_第1张图片

你可能感兴趣的:(opencv)