mirror of
https://github.com/openmv/openmv.git
synced 2025-11-04 14:49:50 +08:00
Merge pull request #278 from kwagyeman/master
Fix up lens_correction and add example script.
This commit is contained in:
commit
07436299e9
@ -1072,6 +1072,7 @@ void imlib_lens_corr(image_t *img, float strength, float zoom)
|
|||||||
// Create a temp copy of the image to pull pixels from.
|
// Create a temp copy of the image to pull pixels from.
|
||||||
uint32_t *tmp = fb_alloc(((img->w + UINT32_T_MASK) >> UINT32_T_SHIFT) * img->h);
|
uint32_t *tmp = fb_alloc(((img->w + UINT32_T_MASK) >> UINT32_T_SHIFT) * img->h);
|
||||||
memcpy(tmp, img->data, ((img->w + UINT32_T_MASK) >> UINT32_T_SHIFT) * img->h);
|
memcpy(tmp, img->data, ((img->w + UINT32_T_MASK) >> UINT32_T_SHIFT) * img->h);
|
||||||
|
memset(img->data, 0, ((img->w + UINT32_T_MASK) >> UINT32_T_SHIFT) * img->h);
|
||||||
|
|
||||||
for (int y = 0, yy = img->h; y < yy; y++) {
|
for (int y = 0, yy = img->h; y < yy; y++) {
|
||||||
uint32_t *row_ptr = IMAGE_COMPUTE_BINARY_PIXEL_ROW_PTR(img, y);
|
uint32_t *row_ptr = IMAGE_COMPUTE_BINARY_PIXEL_ROW_PTR(img, y);
|
||||||
@ -1104,6 +1105,7 @@ void imlib_lens_corr(image_t *img, float strength, float zoom)
|
|||||||
// Create a temp copy of the image to pull pixels from.
|
// Create a temp copy of the image to pull pixels from.
|
||||||
uint8_t *tmp = fb_alloc(img->w * img->h * sizeof(uint8_t));
|
uint8_t *tmp = fb_alloc(img->w * img->h * sizeof(uint8_t));
|
||||||
memcpy(tmp, img->data, img->w * img->h * sizeof(uint8_t));
|
memcpy(tmp, img->data, img->w * img->h * sizeof(uint8_t));
|
||||||
|
memset(img->data, 0, img->w * img->h * sizeof(uint8_t));
|
||||||
|
|
||||||
for (int y = 0, yy = img->h; y < yy; y++) {
|
for (int y = 0, yy = img->h; y < yy; y++) {
|
||||||
uint8_t *row_ptr = IMAGE_COMPUTE_GRAYSCALE_PIXEL_ROW_PTR(img, y);
|
uint8_t *row_ptr = IMAGE_COMPUTE_GRAYSCALE_PIXEL_ROW_PTR(img, y);
|
||||||
@ -1136,6 +1138,7 @@ void imlib_lens_corr(image_t *img, float strength, float zoom)
|
|||||||
// Create a temp copy of the image to pull pixels from.
|
// Create a temp copy of the image to pull pixels from.
|
||||||
uint16_t *tmp = fb_alloc(img->w * img->h * sizeof(uint16_t));
|
uint16_t *tmp = fb_alloc(img->w * img->h * sizeof(uint16_t));
|
||||||
memcpy(tmp, img->data, img->w * img->h * sizeof(uint16_t));
|
memcpy(tmp, img->data, img->w * img->h * sizeof(uint16_t));
|
||||||
|
memset(img->data, 0, img->w * img->h * sizeof(uint16_t));
|
||||||
|
|
||||||
for (int y = 0, yy = img->h; y < yy; y++) {
|
for (int y = 0, yy = img->h; y < yy; y++) {
|
||||||
uint16_t *row_ptr = IMAGE_COMPUTE_RGB565_PIXEL_ROW_PTR(img, y);
|
uint16_t *row_ptr = IMAGE_COMPUTE_RGB565_PIXEL_ROW_PTR(img, y);
|
||||||
|
|||||||
@ -1245,11 +1245,11 @@ static mp_obj_t py_image_lens_corr(uint n_args, const mp_obj_t *args, mp_map_t *
|
|||||||
|
|
||||||
float strength = py_helper_lookup_float(kw_args, MP_OBJ_NEW_QSTR(MP_QSTR_strength),
|
float strength = py_helper_lookup_float(kw_args, MP_OBJ_NEW_QSTR(MP_QSTR_strength),
|
||||||
(n_args > 1) ? mp_obj_get_float(args[1]) : 1.8);
|
(n_args > 1) ? mp_obj_get_float(args[1]) : 1.8);
|
||||||
PY_ASSERT_TRUE_MSG(strength >= 0.0, "strength must be > 0");
|
PY_ASSERT_TRUE_MSG(strength > 0.0, "strength must be > 0");
|
||||||
|
|
||||||
float zoom = py_helper_lookup_float(kw_args, MP_OBJ_NEW_QSTR(MP_QSTR_zoom),
|
float zoom = py_helper_lookup_float(kw_args, MP_OBJ_NEW_QSTR(MP_QSTR_zoom),
|
||||||
(n_args > 2) ? mp_obj_get_float(args[2]) : 1.0);
|
(n_args > 2) ? mp_obj_get_float(args[2]) : 1.0);
|
||||||
PY_ASSERT_TRUE_MSG(zoom >= 1.0, "zoom must be > 1");
|
PY_ASSERT_TRUE_MSG(zoom > 0.0, "zoom must be > 0");
|
||||||
|
|
||||||
fb_alloc_mark();
|
fb_alloc_mark();
|
||||||
imlib_lens_corr(arg_img, strength, zoom);
|
imlib_lens_corr(arg_img, strength, zoom);
|
||||||
@ -1283,7 +1283,7 @@ static mp_obj_t py_image_rotation_corr(uint n_args, const mp_obj_t *args, mp_map
|
|||||||
|
|
||||||
float zoom = py_helper_lookup_float(kw_args, MP_OBJ_NEW_QSTR(MP_QSTR_zoom),
|
float zoom = py_helper_lookup_float(kw_args, MP_OBJ_NEW_QSTR(MP_QSTR_zoom),
|
||||||
(n_args > 6) ? mp_obj_get_float(args[6]) : 1.0);
|
(n_args > 6) ? mp_obj_get_float(args[6]) : 1.0);
|
||||||
PY_ASSERT_TRUE_MSG(zoom >= 0.0, "zoom must be > 0");
|
PY_ASSERT_TRUE_MSG(zoom > 0.0, "zoom must be > 0");
|
||||||
|
|
||||||
fb_alloc_mark();
|
fb_alloc_mark();
|
||||||
imlib_rotation_corr(arg_img, x_rotation, y_rotation, z_rotation, x_translation, y_translation, zoom);
|
imlib_rotation_corr(arg_img, x_rotation, y_rotation, z_rotation, x_translation, y_translation, zoom);
|
||||||
|
|||||||
21
usr/examples/04-Image-Filters/lens_correction.py
Normal file
21
usr/examples/04-Image-Filters/lens_correction.py
Normal file
@ -0,0 +1,21 @@
|
|||||||
|
# Lens Correction
|
||||||
|
#
|
||||||
|
# This example shows off how to use the lens correction method to fix lens
|
||||||
|
# distortion in an image. You need to do this for qrcode / barcode / data matrix
|
||||||
|
# detection. Increase the strength below until lines are straight in the view.
|
||||||
|
# Zoom in (higher) or out (lower) until you see enough of the image.
|
||||||
|
|
||||||
|
import sensor, image, time
|
||||||
|
|
||||||
|
sensor.reset()
|
||||||
|
sensor.set_pixformat(sensor.RGB565)
|
||||||
|
sensor.set_framesize(sensor.QVGA)
|
||||||
|
sensor.skip_frames(time = 2000)
|
||||||
|
clock = time.clock()
|
||||||
|
|
||||||
|
while(True):
|
||||||
|
clock.tick()
|
||||||
|
|
||||||
|
img = sensor.snapshot().lens_corr(strength = 1.8, zoom = 1.0)
|
||||||
|
|
||||||
|
print(clock.fps())
|
||||||
Loading…
Reference in New Issue
Block a user