C#/C# OpenCV/

C# OpenCV 6-2. BitWise 추가 설명

2019. 11. 22.

연산자 종류

종류 의미 부호 설명
And 논리 곱 & 조건들이 모두 참 일경우 참
Or 논리 합 | 조건중 1개만 참이어도 참
Xor 비교 ^ 조건이 서로 다를 경우 참
Not 부정 ~ 참은 거짓으로 거짓은 참으로

 

BitWise 2진연산

일반적으로 통용되는 색상코드는 RGB 16진수 형태로 표현된다.

하지만 C# 코드에서 색상값을 나타내는 Scalar 값은 10진수.

연산은 2진수로 진행된다.

이에 검증차원 간단하게 알아보려고 한다.

ex) 보라색의 경우 800080

    R : 80 , G : 00 , B : 80 16진수의 값을 가지고있다.

    10진수로 바꿔보면 

    R : 128 , G : 0 , B : 128

    2진수로 바꿔보면

    R : 10000000 , G : 00000000 , B : 10000000

 

사용한 Code

string R16 = ColorCode.Substring(0, 2);

int R10 = Convert.ToInt32(R16, 16);

string R2 = Convert.ToString(R10, 2);

string.Substring(int startIndex, int length)

      startIndex 문자열에서 시작할 위치 인덱스

      length 시작위치부터의 길이

※ 입력된 RGB 코드에서 각각 R, G, B 값 분리

 

Convert.ToInt32(string value, int fromBase)

      value 변환 해줄 원본값

      frombase 원본값의 진숫값

※ 16진수로 분리한 값을 10진수로 변환

 

Convert.ToString(int value, int toBase)

      value 변환해 줄 원본값

      toBase 목표진수값

※ 10진수로 변환한 값을 2진수로 변환

 
var pt = image.At<Vec3b>(0, 0);

int R10 = pt.item2;

int G10 = pt.item1;

int B10 = pt.item0;

var pt = image.At<Vec3b>(0, 0)

      결과 이미지의 (0, 0) 포인트 위치의 픽셀정보 취득

      단색 이미지라 크기내 어느 위치든 상관 없다.

      OpenCV 에서는 BGR값을 사용하기 때문에

      pt.item0 가 B, pt.item1 이 G, pt.item2 가 R 값을가진다.

 

결과

※ BitWise 함수를 쓰는것과 2진연산을 통해 나온 값이 동일한 것을 볼 수 있다.

추가로 프로젝트 파일 첨부

https://drive.google.com/file/d/1xEro0XHCknSXybmO322wdx21BnsP7whR/view?usp=sharing

 

bitWiseTest2.zip

 

drive.google.com