OpenCVSharp 카메라 제어 #2 ( Line Generator)
Software/C#2023. 3. 6. 13:12
반응형
지난 포스팅에 이어 이번에는 출력되는 영상에 Line을 그려주는 코드를 넣어보도록 하겠습니다.
1. Main 화면에 지난번에 이어 HScrollBar 2개(min:0, max:640), VScrollBar 2개(min:0, max:480) 를 올립니다.
* 각 ScrollBar 의 Maximum 크기는 화면의 크기와 동일하게 설정합니다.
2. TextBox 4 개의 올려 줍니다. 각각의 Name 속성을 다음과 같이 설정합니다.
* textOffsetX, textOffsetY, textSizeX, textSizeY
3. CheckBox 를 1개 올려 줍니다. Name 속성은 checkLineDisplay 로 설정합니다.
4. 지난 포스팅에 기술한 카메라 제어 클래스에 아래의 코드를 추가해 줍니다.
public class CameraThread
{
public int displayLineX1 { get; set; }
public int displayLineX2 { get; set; }
public int displayLineY1 { get; set; }
public int displayLineY2 { get; set; }
public bool displayLine { get; set; } = true;
//-------------------------------------------------------------------------------------
public void Run()
{
capture.Open(cameraNumber);
using (Mat displayFrame = new())
{
while (isCameraRunning)
{
capture.Read(sourceFrame);
if (!sourceFrame.Empty())
{
Cv2.CopyTo(sourceFrame, displayFrame);
if (displayLine == true) DrawLine(displayFrame);
UpdateFrame(BitmapConverter.ToBitmap(displayFrame));
}
}
}
capture.Release();
GC.Collect();
}
//-------------------------------------------------------------------------------------
private void DrawLine(Mat displayFrame)
{
Cv2.Line(displayFrame, 0, displayLineY1, displaySize.X, displayLineY1, Scalar.Yellow, 1, LineTypes.AntiAlias);
Cv2.Line(displayFrame, 0, displayLineY2, displaySize.X, displayLineY2, Scalar.Yellow, 1, LineTypes.AntiAlias);
Cv2.Line(displayFrame, displayLineX1, 0, displayLineX1, displaySize.Y, Scalar.Yellow, 1, LineTypes.AntiAlias);
Cv2.Line(displayFrame, displayLineX2, 0, displayLineX2, displaySize.Y, Scalar.Yellow, 1, LineTypes.AntiAlias);
}
//-------------------------------------------------------------------------------------
}
5. 스크롤바 4개의 scroll 이벤트 함수로 Line_Scroll을 모두 동일하게 설정합니다.
6. Main 화면의 코드를 추가 합니다.
private void checkLineDisplay_CheckedChanged(object sender, EventArgs e)
{
cameraThread.displayLine = checkLineDisplay.Checked;
}
//--------------------------------------------------------------------------------
private void Line_Scroll(object sender, ScrollEventArgs e)
{
if (sender is ScrollBar scroll)
{
var Size = new System.Drawing.Point();
var Offset = new System.Drawing.Point();
switch (int.Parse(scroll.Tag.ToString()))
{
case 0: cameraThread.displayLineX1 = scroll.Value; break;
case 1: cameraThread.displayLineX2 = scroll.Value; break;
case 2: cameraThread.displayLineY1 = scroll.Value; break;
case 3: cameraThread.displayLineY2 = scroll.Value; break;
}
Size.X = Math.Abs(cameraThread.displayLineX2 - cameraThread.displayLineX1);
Size.Y = Math.Abs(cameraThread.displayLineY2 - cameraThread.displayLineY1);
Func<int, int, int> Compare = (int x, int y) => { if (x < y) return x; else return y; };
Offset.X = Compare(cameraThread.displayLineX1, cameraThread.displayLineX2);
Offset.Y = Compare(cameraThread.displayLineY1, cameraThread.displayLineY2);
textOffsetX.Text = Offset.X.ToString();
textOffsetY.Text = Offset.Y.ToString();
textSizeX.Text = Size.X.ToString();
textSizeY.Text = Size.Y.ToString();
}
}
반응형
'Software > C#' 카테고리의 다른 글
OpenCVSharp 카메라 제어 #4 ( Pattern Matching ) (0) | 2023.03.21 |
---|---|
OpenCVSharp 카메라 제어 #3 ( Image Capture ) (0) | 2023.03.20 |
OpenCVSharp 카메라 제어 #1 ( 카메라 영상 출력 ) (0) | 2023.03.05 |
Ocean Optics 사의 OmniDriver 제어코드 - C# (0) | 2023.02.17 |
ScottPlot (Growing Data - #2) (2) | 2023.02.16 |
댓글()