# Resize image, compute, resize back to original

Hello,

This might seem like a simple issue but here is what I need help with:

1. for example I receive a 1280960 image, I then resize it to 640480 or 320*240 pixels
2. I do some processing and I end up with 2 points: P1 at (x1,y1) and P2 at (x2,y2)
3. how do I draw these points on the original input image with the corresponding location?

I got to resize the image and computed the 2 points describing a line. I am stuck in the last part, resizing & displaying the 2 points back to the original image.

I am using Android for development. Regards!

edit retag close merge delete

May be you can use the scale factor for x & y (used for reducing size) to map the point P1 in original image.

( 2014-09-08 04:59:16 -0500 )edit
1

Scale factor didn't work as expected, maybe it's an error from my algorithm but if I reduce the image to half ( /2 ) then to map the points back they should be multiplied by 2 ( x1 *= 2, y1 *= 2, etc.) but they show in wrong places..

( 2014-09-08 11:08:51 -0500 )edit

Sort by » oldest newest most voted

Consider a trivial example: the image size is reduced exactly by half.

So, the cartesian coordinate (x, y) in the original image becomes coordinate (x/2, y/2) in the reduced image, and coordinate (x', y') in the reduced image corresponds to coordinate (x2, y2) in the original image.

Of course, fractional coordinates get typically rounded off, in a reduced scale image, so the exact mapping is only possible for even-numbered coordinates in this example's original image.

Generalizing this, if the image's width is scaled by a factor of w horizontally and h vertically, coordinate (x, y) becomes coordinate(xw, yh), rounded off. In the example I gave, both w and h are 1/2, or .5

You should be able to figure out the values of w and h yourself, and be able to map the coordinates trivially. Of course, due to rounding off, you will not be able to compute the exact coordinates in the original image.

more

There are some interpolation algorithms in OpenCV and You can find all the examples here: How to resize images in OpenCV python

Code:

image_scaled=cv2.resize(image,None,fx=.75,fy=.75,interpolation = cv2.INTER_LINEAR)
img_double=cv2.resize(image,None,fx=2,fy=2,interpolation=cv2.INTER_CUBIC)
image_resize=cv2.resize(image,(200,300),interpolation=cv2.INTER_AREA)
image_resize=cv2.resize(image,(500,400),interpolation=cv2.INTER_LANCZOS4)

• INTER_NEAREST – a nearest-neighbor interpolation
• INTER_LINEAR – a bilinear interpolation (used by default)

• INTER_AREA – resampling using pixel area relation. It may be a preferred method for image decimation, as it gives moire’-free results. But when the image is zoomed, it is similar to the INTER_NEAREST method. I

• NTER_CUBIC – a bicubic interpolation over 4×4 pixel
neighborhood

• INTER_LANCZOS4 – a Lanczos interpolation over 8×8 pixel
neighborhood

more

Official site

GitHub

Wiki

Documentation