🔥 Programming/OpenCV

    [OpenCV4] C# Bitwise 연산

    [OpenCV4] C# Bitwise 연산

    Bitwise 연산 Bitwise 연산에는 4가지가 있다. BitwiseAnd BitwiseOr BitwiseXor BitwiseNot 실제로 나의 경우는 BitwiseNot은 종종 사용하지만 다른 함수들의 경우에는 사용 빈도수가 낮은편이다. 예를들면 어떠한 이미지의 배경에 다른 이미지를 삽입 하였을 경우, 배경을 지우는 처리를 할때, grayscale을 바꿔주어 BitwiseNot 연산을 한다던지.. 그런식으로 사용한다. 더구나 C#에서는 포인터가 없기에, 비트맵의 RGB 데이터에 접근하기 위해선 꽤나 귀찮다. And와 Or, Xor, Not 연산은 보통은 대학교 1학년때 ? 배운 논리수학에 나왔던 내용과 해당 비트 연산은 동일하다. 우선, 아래는 기본 이미지와, 단일 채널로 바꿔준 이미지이다. And..

    [OpenCV4] C# OpenCV4 윤곽선 검출

    [OpenCV4] C# OpenCV4 윤곽선 검출

    윤곽선 검출 윤곽선 검출은 실제로 template matching 만큼 많이 쓰는것 같다. 활용도가 정말 많아서 알아두면 좋은 기능이다. 아래는 사용 이미지 전후 차이이다. 윤곽선 검출은 활용도가 높지만 구현이 간단하기에 사용하기가 쉽다. 아래 코드를 보자. 사용하고자 하는 이미지를 저장할 Mat인 src와 이미지를 흑백으로 바꿔줄 bin 그리고 실제로 윤곽선을 그려줄 temp에 OpenCV4에서 제공하는 FindContours를 사용하면 간단하다. FindContours 사용방법과 활용도는 지난글의 코드에 달린 주석을 보면 이해하기가 쉬우니 참조하자. https://hyun-jun5.tistory.com/88 [OpenCV4] C# OpenCV4 Contours와 Moment를 이용한 MatchShap..

    [OpenCV4] C# OpenCV4 Contours와 Moment를 이용한 MatchShape

    [OpenCV4] C# OpenCV4 Contours와 Moment를 이용한 MatchShape

    Contours란? Contours는 이미지 윤곽을 말한다. 즉, 같은 색이나 강도를 가지는 연속된 점들을 연결시켜놓은 선이다. 등고선 또는 등치선이라고 한다. 그럼 실제로 사용해보도록 하자. 인자로 받아온 Bitmap을 Matrix형태로 변환시켜준 이후, 더 나은 이미지 검출을 위해 이진이미지로 바꿔준다. Threshold는 실제로 바꿔보며 가장 검출이 잘되는 값을 찾아넣어준다. 그리고 검출된 Contours들을 실제로 사용하기위해 반환값으로 사용한 이미지와 검출된 contours, 계층으로 설정해준다. 사용한 이미지는 그림판으로 직접 만든 조잡한 아래의 이미지이다. 그럼 실제로 찾고 그려주는 부분의 코드를 확인해보자 Code ( Contours 만 이용 ) Point[][] contours1; Hie..

    [OpenCV4] C# OpenCV4 배경색 변경

    [OpenCV4] C# OpenCV4 배경색 변경

    배경색 변경 OpenCV4를 사용하다보면, 이미지를 병합시켜야할때와, 병합 이후 배경이 함께나와 제거해야할 경우가 많다. 실시간으로 병합되는 이미지를 배경 이미지 내에서의 위치를 변경시켜야할 때, 그 이미지의 배경을 지워주지 않으면 원활한 이미지 병합을 했다고 볼 수 없다. 배경 자체를 지우는 방법도 있지만, 우선 배경 색 변경을 하는 방법에 대해 알아보자. 변경할 이미지는 배경이 검은색인 볼링공 이미지이다. 해당 이미지의 배경색을 흰색으로 만들 예정이다. C#에서 포인터를 사용하려면 unsfae를 이용하여야 한다. 그리고 비트맵의 Lock Bits를 통해 Data를 가져오고, Scan0을 통해 포인터 주소를 구한다. 이후 비트맵의 한 픽셀의 RGB 값이 나오게 되는데 이 부분을 수정을 통해 색을 바꿔 ..

    [OpenCV4] C# OpenCV4 Template Matching

    [OpenCV4] C# OpenCV4 Template Matching

    Template Matching Template Matching은 더 큰 이미지에서 찾고자 하는 이미지를 찾는 기능이다. OpenCV에서 없어서는 안될 기능이며, 자세한 사항은 아래 OpenCV URL에서 확인할 수 있다. https://docs.opencv.org/4.x/d4/dc6/tutorial_py_template_matching.html OpenCV: Template Matching Goals In this chapter, you will learn Theory Template Matching is a method for searching and finding the location of a template image in a larger image. OpenCV comes with a func..

    [OpenCV4] C# OpenCV4 WebCam 사용하기

    [OpenCV4] C# OpenCV4 WebCam 사용하기

    C# OpenCV4 Webcam 사용하기 OpenCv4를 사용하기에, 기본적으로 OpenCV4 Nuget 추가를 해주셔야합니다. Code using OpenCvSharp; using OpenCvSharp.Extensions; using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Threading; using System.Threading.Tasks; using System.Windows.Forms; using Point = OpenCvSharp.Point; n..

    [OpenCV4] C# OpenCV4 Gamma

    [OpenCV4] C# OpenCV4 Gamma

    C# OpenCV4 Gamma를 조정한 이미지 프로세싱 배경 이미지 무료로 제공하는 배경 이미지를 Gamma를 조정하여 변경해보도록 하겠습니다. Code using OpenCvSharp; using OpenCvSharp.Extensions; using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms; namespace Gamma { public partial class Form1 : Fo..

    [OpenCV4] C# OpenCV4 Houghline (직선검출)

    [OpenCV4] C# OpenCV4 Houghline (직선검출)

    C# OpenCV4 직선 검출 직선에 대한 방정식은 우리가 흔히 알고 있는 기울기(a)와 y절편(b)로 표현되는 𝑦=a𝑥+b도 있지만 삼각함수에 의한 매개변수 방정식으로써는 r = 𝑥cos𝜃 + 𝑦sin𝜃 로도 표현됩니다. 선형 Hough 변환의 최종 결과는 누산기와 유사한 2차원 배열(행렬)입니다. 이 행렬의 한 차원은 양자화된 각도 θ 이고 다른 차원은 양자화된 거리 r 입니다. 행렬의 각 요소는 양자화된 매개변수( r , θ ) 로 표시되는 선에 위치한 점 또는 픽셀의 합과 같은 값을 갖습니다 . 따라서 값이 가장 높은 요소는 입력 이미지에서 가장 많이 표현되는 직선을 나타냅니다. C#으로 구현한 Code를 확인해보겠습니다. Houghline (허프변환) 왼쪽 - Hough line, 오른쪽 - I..