arqam
arqam

Reputation: 3789

OpenCV : How to replace a bigger rect with a smaller rect

I am doing some operation where I need to replace the bigger rectangle with the smaller rectangle.

Most answers suggested to use smallerRectMat.copyTo(biggerRectMat) but it didn't give me the require output. The submat is changed but the original image is as it is.

And when I try to see the submat both became same of same smaller rectangle size.

Mat rectNose = testBuffer.submat(rectA.y,rectA.y+rectA.height,rectA.x,rectC.x+rectC.width);
Rect biggerRect = getHeadContour(testBuffer);
Mat rectHead = testBuffer.submat(biggerRect.y+1,biggerRect.y+biggerRect.height,biggerRect.x+1,biggerRect.x+biggerRect.width);
rectNose.copyTo(rectHead);
Imgcodecs.imwrite("/Users/test.jpg",rectHead);
Imgcodecs.imwrite("/Users/test1.jpg",rectNose);
Imgcodecs.imwrite("/Users/test1.jpg",testBuffer);

Basically I want to copy the rectangle near the nose region to the rectangle with blue boundary at forehead.

enter image description here

Upvotes: 0

Views: 154

Answers (1)

abirpahlwan
abirpahlwan

Reputation: 52

You can try ROI(Region Of Image) scaling

smallRect = img[rectA.y:rectA.y+rectA.height, rectA.x:rectC.x+rectC.width]
upscaledRegion = cv2.resize(smallRect , (biggerRect.width, biggerRect.height), interpolation=cv2.INTER_AREA)
img[biggerRect.y:biggerRect.y+biggerRect.height, biggerRect.x:biggerRect.x+biggerRect.width] = upscaledRegion

Upvotes: 1

Related Questions