이미지는 픽셀들의 집합이며, 하나의 픽셀은 색상에 따라 n바이트로 표현되곤한다. 회색조 이미지의 경우 보통 한 픽셀이 0~255값을 가지는데 값의 경우의수가 256가지인셈이다.

그러면 2^8 = 256 이므로 8bit(1byte)의 메모리가 필요하다. 예) 10101000

두 이미지의 같은 좌표에 있는 픽셀들에 비트 연산을 수행할 수 있다. 비트 연산을 통해 특정 영역을 도려내거나 합성하고, 이미지를 반전시킬 수도 있다.

논리 연산

비트 단위의 연산자로는 AND, OR, XOR, NOT가 있다.

Core.bitwise_and(src, src2, dst)
Core.bitwise_or(src, src2, dst)
Core.bitwise_xor(src, src2, dst)
Core.bitwise_not(src,dst)

두 도형(이미지1, 이미지2)을 비트 연산하는 예제를 살펴보자

val image1 = Mat.zeros(300, 300, CvType.CV_8UC1).apply {
    Imgproc.rectangle(this, Point(100.0, 100.0), Point(250.0, 250.0), Scalar(255.0), -1)
}
binding.image1.setImageBitmap(bitmapUtil.bitmapFrom(image1))

val image2 = Mat.zeros(300, 300, CvType.CV_8UC1).apply {
    Imgproc.circle(this, Point(150.0, 150.0), 90, Scalar(255.0), -1)
}
binding.image2.setImageBitmap(bitmapUtil.bitmapFrom(image2))

val and = Mat()
Core.bitwise_and(image1, image2, and)
binding.and.setImageBitmap(bitmapUtil.bitmapFrom(and))

val or = Mat()
Core.bitwise_or(image1, image2, or)
binding.or.setImageBitmap(bitmapUtil.bitmapFrom(or))

val xor = Mat()
Core.bitwise_xor(image1, image2, xor)
binding.xor.setImageBitmap(bitmapUtil.bitmapFrom(xor))

val not = Mat()
Core.bitwise_not(image1, not)
binding.not.setImageBitmap(bitmapUtil.bitmapFrom(not))

 

 

카테고리: OpenCV

0개의 댓글

답글 남기기

Avatar placeholder

이메일은 공개되지 않습니다. 필수 입력창은 * 로 표시되어 있습니다.