🔥 Programming

    [C#] 압축파일 압축 풀지않고 이미지 가져오기

    [C#] 압축파일 압축 풀지않고 이미지 가져오기

    압축을 풀지않고 가져오는방법은 나는 2가지 분류로 나누어 구현해보았다. 흔히들 사용하는 zip 파일 이미지 가져오는것, 우리(개발자)가 사용하는 7z 파일의 이미지를 가져오는것 우선 zip파일이미지를 압축풀지않고 이미지를 가져오는 방법이다. DotNetZip 우선 2가지 방법 모두 Nuget 패키지 다운을 받아서 이용하였다. DotNetZip 을 다운받은 후에 아래 코드를 참조하자. using (FileStream fStream = new FileStream(ImagePath, FileMode.OpenOrCreate, FileAccess.ReadWrite)) using (Ionic.Zip.ZipFile zip = Ionic.Zip.ZipFile.Read(ImagePath)) { foreach (Ionic..

    [C#] List에서 근사값 찾기

    List에 저장되어있는 값과 구하고자 하는 값이 일치하지않아 근사값을 찾아 해당 값의 index를 구해오는 코드가 필요했다. 아래 코드들을 이용하여 구했지만.. 결국 연산 속도때문에 사용하진 않았다.. 첫번째로 foreach 문을 사용한 근사값 찾기이다. List findList = new List() {1,3,5,7,9}; int input = 4; int closest = myList[0]; int idx = 0; foreach (int num in myList) { if (Math.Abs(input - num) < Math.Abs(input - closest)) { closest = num; } } idx = findList.IndexOf(closest); 해당 코드는 List안에 있는 값을 반복하..

    [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..

    [C/C++] 동적할당 malloc, calloc, realloc들의 차이란?

    [C/C++] 동적할당 malloc, calloc, realloc들의 차이란?

    1. malloc return 타입이 void*인 void형 포인터이다. 동적할당을 하게될 경우 return할때의 자료형을 명시할 수 없기에 void 형 시작주소를 return 한다. malloc은 단순히 void형 시작 주소를 반환하기에 우리가 필요한 자료형으로 아래와 같이 형변환해서 사용해주어야한다. 처음 malloc을 하게 되면 할당된 메모리를 초기화 하지않기에, 쓰레기값이 들어있다. malloc 이후 memset 등을 이용하여 메모리 초기화를 시켜주어야한다. 2. calloc return 타입이 malloc과 같은 void형 포인터이다. 동작방식이 매우 비슷하며, 입력 파라미터에 size_t num이 추가되어 있다. 동적 메모리 생성하는 개수를 추가해주어 사용한다. 다만 다른점이 있다면, mall..

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

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

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

    [Tensorflow / Deep learning] 은닉층 (Hidden Layers)

    [Tensorflow / Deep learning] 은닉층 (Hidden Layers)

    은닉층 (Hidden Layer) 이란? 은닉층은 입력층과 출력층 사이의 모든 층을 말한다. 은닉층은 모든 입력노드들로부터 입력값을 받아 가중합을 계산하고, 이 값을 전이함수에 적용하여 출력층에 전달하도록 되어있다. 모든 입력노드와 은닉노드들은 가중치를 가지고 있는 망으로 연결되어있고, 은닉노드와 출력노드 역시 마찬가지이다. 아래이미지를 확인해보자. 위의 그림을 기준으로 표현할때는 3개의 층을 그리지만, 실제로 인경신경망의 총 개수를 셀 때는 입력층을 생략한다. 따라서 위 구조에서는 2개의 층이 존재한다고 부른다. 퍼셉트론을 기본 빌딩 블록으로 하여, 이런 패턴에 따라 2차원적으로 연결되어 구성되는 인공신경망의 일종을 특별히 다층 퍼셉트론(MLP: multi-layer perceptron)이라고 한다. ..

    [Machine learning] One-hot encoding와 Softmax Regression, Cross-entropy란?

    [Machine learning] One-hot encoding와 Softmax Regression, Cross-entropy란?

    소프트맥스 회귀 (Softmax Regrssion) 란? 소프트맥스 회귀는 다중 분류에 대한 회귀이다. 사실상 일반적으로 회귀는 bool문과 같이 0 또는 1, true 또는 false 식으로 상반되는 값을 분류하는데 사용된다. 하지만 소프트맥스 회귀를 하게 될경우 분류할때 이중적 분류가 아닌 2개 이상의 분류를 하는데 사용될 수 있다. 대표적인 예로 아이리스 품종 분류가 있다. 위의 이미지에서 종속변수의 총 갯수는 3가지이다. ('setosa', 'versicolor', 'virginica') 하지만 예를 들어 첫번째 행의 독립변수로 미뤄 보았을때, 확률이 아래와 같다면? Setosa 0.6 virginica 0.5 versicolor 0.4 이 경우 3가지의 결과 값의 합이 1을 초과하게된다. 간단하..