本文整理汇总了C#中OpenCvSharp.IplImage.Rectangle方法的典型用法代码示例。如果您正苦于以下问题:C# IplImage.Rectangle方法的具体用法?C# IplImage.Rectangle怎么用?C# IplImage.Rectangle使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类OpenCvSharp.IplImage
的用法示例。
在下文中一共展示了IplImage.Rectangle方法的5个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C#代码示例。
示例1: Contour
public Contour()
{
// cvContourArea, cvArcLength
// 輪郭によって区切られた領域の面積と,輪郭の長さを求める
const int SIZE = 500;
// (1)画像を確保し初期化する
using (CvMemStorage storage = new CvMemStorage())
using (IplImage img = new IplImage(SIZE, SIZE, BitDepth.U8, 3))
{
img.Zero();
// (2)点列を生成する
CvSeq<CvPoint> points = new CvSeq<CvPoint>(SeqType.PolyLine, storage);
CvRNG rng = new CvRNG((ulong)DateTime.Now.Ticks);
double scale = rng.RandReal() + 0.5;
CvPoint pt0 = new CvPoint
{
X = (int)(Math.Cos(0) * SIZE / 4 * scale + SIZE / 2),
Y = (int)(Math.Sin(0) * SIZE / 4 * scale + SIZE / 2)
};
img.Circle(pt0, 2, CvColor.Green);
points.Push(pt0);
for (int i = 1; i < 20; i++)
{
scale = rng.RandReal() + 0.5;
CvPoint pt1 = new CvPoint
{
X = (int)(Math.Cos(i * 2 * Math.PI / 20) * SIZE / 4 * scale + SIZE / 2),
Y = (int)(Math.Sin(i * 2 * Math.PI / 20) * SIZE / 4 * scale + SIZE / 2)
};
img.Line(pt0, pt1, CvColor.Green, 2);
pt0.X = pt1.X;
pt0.Y = pt1.Y;
img.Circle(pt0, 3, CvColor.Green, Cv.FILLED);
points.Push(pt0);
}
img.Line(pt0, points.GetSeqElem(0).Value, CvColor.Green, 2);
// (3)包含矩形,面積,長さを求める
CvRect rect = points.BoundingRect(false);
double area = points.ContourArea();
double length = points.ArcLength(CvSlice.WholeSeq, 1);
// (4)結果を画像に書き込む
img.Rectangle(new CvPoint(rect.X, rect.Y), new CvPoint(rect.X + rect.Width, rect.Y + rect.Height), CvColor.Red, 2);
string text_area = string.Format("Area: wrect={0}, contour={1}", rect.Width * rect.Height, area);
string text_length = string.Format("Length: rect={0}, contour={1}", 2 * (rect.Width + rect.Height), length);
using (CvFont font = new CvFont(FontFace.HersheySimplex, 0.7, 0.7, 0, 1, LineType.AntiAlias))
{
img.PutText(text_area, new CvPoint(10, img.Height - 30), font, CvColor.White);
img.PutText(text_length, new CvPoint(10, img.Height - 10), font, CvColor.White);
}
// (5)画像を表示,キーが押されたときに終了
using (CvWindow window = new CvWindow("BoundingRect", WindowMode.AutoSize))
{
window.Image = img;
CvWindow.WaitKey(0);
}
}
}
示例2: BoundingRect
public BoundingRect()
{
// cvBoundingRect
// 点列を包含する矩形を求める
// (1)画像とメモリストレージを確保し初期化する
// (メモリストレージは、CvSeqを使わないのであれば不要)
using (IplImage img = new IplImage(640, 480, BitDepth.U8, 3))
using (CvMemStorage storage = new CvMemStorage(0))
{
img.Zero();
CvRNG rng = new CvRNG(DateTime.Now);
// (2)点列を生成する
///*
// お手軽な方法 (普通の配列を使う)
CvPoint[] points = new CvPoint[50];
for (int i = 0; i < 50; i++)
{
points[i] = new CvPoint()
{
X = (int)(rng.RandInt() % (img.Width / 2) + img.Width / 4),
Y = (int)(rng.RandInt() % (img.Height / 2) + img.Height / 4)
};
img.Circle(points[i], 3, new CvColor(0, 255, 0), Cv.FILLED);
}
//*/
/*
// サンプルに準拠した方法 (CvSeqを使う)
CvSeq points = new CvSeq(SeqType.EltypePoint, CvSeq.SizeOf, CvPoint.SizeOf, storage);
for (int i = 0; i < 50; i++) {
CvPoint pt = new CvPoint();
pt.X = (int)(rng.RandInt() % (img.Width / 2) + img.Width / 4);
pt.Y = (int)(rng.RandInt() % (img.Height / 2) + img.Height / 4);
points.Push(pt);
img.Circle(pt, 3, new CvColor(0, 255, 0), Cv.FILLED);
}
//*/
// (3)点列を包含する矩形を求めて描画する
CvRect rect = Cv.BoundingRect(points);
img.Rectangle(new CvPoint(rect.X, rect.Y), new CvPoint(rect.X + rect.Width, rect.Y + rect.Height), new CvColor(255, 0, 0), 2);
// (4)画像の表示,キーが押されたときに終了
using (CvWindow w = new CvWindow("BoundingRect", WindowMode.AutoSize, img))
{
CvWindow.WaitKey(0);
}
}
}
示例3: DrawHist
/// <summary>
/// ヒストグラムの描画
/// </summary>
/// <param name="img"></param>
/// <param name="hist"></param>
/// <param name="histSize"></param>
private static void DrawHist(IplImage img, CvHistogram hist, int histSize)
{
img.Set(CvColor.White);
int binW = Cv.Round((double)img.Width / histSize);
for (int i = 0; i < histSize; i++)
{
img.Rectangle(
new CvPoint(i * binW, img.Height),
new CvPoint((i + 1) * binW, img.Height - Cv.Round(hist.Bins[i])),
CvColor.Black, -1, LineType.AntiAlias, 0
);
}
}
示例4: Debug_DispPredict
//--------------------------------------------------------------------------------------
// private
//---------------------------------------------------------------------------------------
private void Debug_DispPredict()
{
using (IplImage retPlot = new IplImage(300, 300, BitDepth.U8, 3))
{
for (int x = 0; x < 300; x++)
{
for (int y = 0; y < 300; y++)
{
float[] sample = { x / 300f, y / 300f };
CvMat sampleMat = new CvMat(1, 2, MatrixType.F32C1, sample);
int ret = (int)svm.Predict(sampleMat);
CvRect plotRect = new CvRect(x, 300 - y, 1, 1);
if (ret == 1)
retPlot.Rectangle(plotRect, CvColor.Red);
else if (ret == 2)
retPlot.Rectangle(plotRect, CvColor.GreenYellow);
}
}
CvWindow.ShowImages(retPlot);
}
}
示例5: Debug_DispPredict
//作成した辞書を図でみる
public void Debug_DispPredict()
{
//辞書ファイルのロード
this.libSVM_model = SVM.LoadModel(@"libsvm_model.xml");
using (IplImage retPlot = new IplImage(300, 300, BitDepth.U8, 3))
{
for (int x = 0; x < 300; x++)
{
for (int y = 0; y < 300; y++)
{
float[] sample = { x / 300f, y / 300f };
//問題を作成
SVMNode[] node_array = new SVMNode[2];
node_array[0] = new SVMNode(1, sample[0]);
node_array[1] = new SVMNode(2, sample[1]);
int ret_double = (int)SVM.Predict(libSVM_model, node_array);
int ret_i = (int)ret_double;
CvRect plotRect = new CvRect(x, 300 - y, 1, 1);
if (ret_i == 1)
retPlot.Rectangle(plotRect, CvColor.Red);
else if (ret_i == 2)
retPlot.Rectangle(plotRect, CvColor.GreenYellow);
}
}
CvWindow.ShowImages(retPlot);
}
}