이미지는 픽셀들의 집합이며, 하나의 픽셀은 색상에 따라 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))
0개의 댓글