using OpenCvSharp;
namespace demo
{
internal class Program
{
static void Main(string[] args)
{
Mat img = Cv2.ImRead("../../../images/WQbGH.jpg");
img = new Mat(img, new Rect() { X = 5, Y = 5, Width = img.Width - 10, Height = img.Height - 10 });
MSER mser = MSER.Create();
// Resize the image so that MSER can work better
Mat img2 = new Mat();
Cv2.Resize(img, img2, new Size(img.Cols * 2, img.Rows * 2)); // 扩大
Mat gray = new Mat();
Cv2.CvtColor(img2, gray, ColorConversionCodes.BGR2GRAY);
Mat vis = new Mat();
img2.CopyTo(vis);
mser.DetectRegions(gray, out Point[][] msers, out Rect[] bboxes);
Point[][] hulls = new Point[msers.Length][];
for (int i = 0; i < msers.Length; i++)
{
hulls[i] = Cv2.ConvexHull(msers[i]);
}
Cv2.Polylines(vis, hulls, true, new Scalar(0, 255, 0));
Mat img3 = new Mat();
Cv2.Resize(vis, img3, img.Size());
Cv2.NamedWindow("img", 0);
Cv2.ImShow("img", img3);
Cv2.WaitKey();
Cv2.DestroyAllWindows();
}
}
}
C++版本代码如下:
#include <iostream>
#include <opencv2\opencv.hpp>
#include <opencv2\highgui\highgui.hpp>
#include <windows.h>
using namespace cv;
using namespace std;
int main()
{
Mat img = imread("../images/WQbGH.jpg");
Rect rect;
rect.x = 5;
rect.y = 5;
rect.width = img.cols - 10;
rect.height = img.rows - 10;
img = img(rect);
Ptr<MSER> mser = MSER::create();
// Resize the image so that MSER can work better
Mat img2;
resize(img, img2, Size(img.cols * 2, img.rows * 2)); // 扩大
Mat gray;
cvtColor(img2, gray, COLOR_BGR2GRAY);
Mat vis;
img2.copyTo(vis);
vector<vector<Point>> msers;
vector<Rect> bboxes;
mser->detectRegions(gray, msers, bboxes);
vector<vector<Point>> hulls;
for (int i = 0; i < msers.size(); i++)
{
vector<Point> hull;
convexHull(msers[i], hull);
hulls.push_back(hull);
}
polylines(vis, hulls, true, Scalar(0, 255, 0));
Mat img3;
resize(vis, img3, img.size());
namedWindow("img", 0);
imshow("img", img3);
waitKey();
destroyAllWindows();
}
Python版本代码如下:
import cv2
img = cv2.imread('WQbGH.jpg')
img = img[5:-5, 5:-5, :]
mser = cv2.MSER_create()
# Resize the image so that MSER can work better
img2 = cv2.resize(img, (img.shape[1] * 2, img.shape[0] * 2))#扩大
gray = cv2.cvtColor(img2, cv2.COLOR_BGR2GRAY)
vis = img2.copy()
regions = mser.detectRegions(gray)
hulls = [cv2.convexHull(p.reshape(-1, 1, 2)) for p in regions[0]]
cv2.polylines(vis, hulls, 1, (0, 255, 0))
img3 = cv2.resize(vis, (img.shape[1], img.shape[0]))
cv2.namedWindow('img', 0)
cv2.imshow('img', img3)
# cv2.imwrite('mser-result.jpg', vis)
cv2.waitKey(0)
cv2.destroyAllWindows()
using OpenCvSharp;
namespace demo
{
internal class Program
{
static void Main(string[] args)
{
Mat img = Cv2.ImRead("../../../images/WQbGH.jpg");
img = new Mat(img, new Rect() { X = 5, Y = 5, Width = img.Width - 10, Height = img.Height - 10 });
MSER mser = MSER.Create();
// Resize the image so that MSER can work better
Mat img2 = new Mat();
Cv2.Resize(img, img2, new Size(img.Cols * 2, img.Rows * 2)); // 扩大
Mat gray = new Mat();
Cv2.CvtColor(img2, gray, ColorConversionCodes.BGR2GRAY);
Mat vis = new Mat();
img2.CopyTo(vis);
mser.DetectRegions(gray, out Point[][] msers, out Rect[] bboxes);
Point[][] hulls = new Point[msers.Length][];
for (int i = 0; i < msers.Length; i++)
{
hulls[i] = Cv2.ConvexHull(msers[i]);
}
Cv2.Polylines(vis, hulls, true, new Scalar(0, 255, 0));
Mat img3 = new Mat();
Cv2.Resize(vis, img3, img.Size());
Cv2.NamedWindow("img", 0);
Cv2.ImShow("img", img3);
Cv2.WaitKey();
Cv2.DestroyAllWindows();
}
}
}
C++版本代码如下:
#include <iostream>
#include <opencv2\opencv.hpp>
#include <opencv2\highgui\highgui.hpp>
#include <windows.h>
using namespace cv;
using namespace std;
int main()
{
Mat img = imread("../images/WQbGH.jpg");
Rect rect;
rect.x = 5;
rect.y = 5;
rect.width = img.cols - 10;
rect.height = img.rows - 10;
img = img(rect);
Ptr<MSER> mser = MSER::create();
// Resize the image so that MSER can work better
Mat img2;
resize(img, img2, Size(img.cols * 2, img.rows * 2)); // 扩大
Mat gray;
cvtColor(img2, gray, COLOR_BGR2GRAY);
Mat vis;
img2.copyTo(vis);
vector<vector<Point>> msers;
vector<Rect> bboxes;
mser->detectRegions(gray, msers, bboxes);
vector<vector<Point>> hulls;
for (int i = 0; i < msers.size(); i++)
{
vector<Point> hull;
convexHull(msers[i], hull);
hulls.push_back(hull);
}
polylines(vis, hulls, true, Scalar(0, 255, 0));
Mat img3;
resize(vis, img3, img.size());
namedWindow("img", 0);
imshow("img", img3);
waitKey();
destroyAllWindows();
}
Python版本代码如下:
import cv2
img = cv2.imread('WQbGH.jpg')
img = img[5:-5, 5:-5, :]
mser = cv2.MSER_create()
# Resize the image so that MSER can work better
img2 = cv2.resize(img, (img.shape[1] * 2, img.shape[0] * 2))#扩大
gray = cv2.cvtColor(img2, cv2.COLOR_BGR2GRAY)
vis = img2.copy()
regions = mser.detectRegions(gray)
hulls = [cv2.convexHull(p.reshape(-1, 1, 2)) for p in regions[0]]
cv2.polylines(vis, hulls, 1, (0, 255, 0))
img3 = cv2.resize(vis, (img.shape[1], img.shape[0]))
cv2.namedWindow('img', 0)
cv2.imshow('img', img3)
# cv2.imwrite('mser-result.jpg', vis)
cv2.waitKey(0)
cv2.destroyAllWindows()