Hướng dẫn python resize image by factor - python thay đổi kích thước hình ảnh theo yếu tố

Tôi muốn sử dụng OpenCV2.0 và Python2.6 để hiển thị hình ảnh được thay đổi kích thước. Tôi đã sử dụng và áp dụng ví dụ này nhưng thật không may, mã này dành cho OpenCV2.1 và dường như không hoạt động trên 2.0. Đây là mã của tôi:

import os, glob
import cv

ulpath = "exampleshq/"

for infile in glob.glob( os.path.join(ulpath, "*.jpg") ):
    im = cv.LoadImage(infile)
    thumbnail = cv.CreateMat(im.rows/10, im.cols/10, cv.CV_8UC3)
    cv.Resize(im, thumbnail)
    cv.NamedWindow(infile)
    cv.ShowImage(infile, thumbnail)
    cv.WaitKey(0)
    cv.DestroyWindow(name)

Vì tôi không thể sử dụng

cv.LoadImageM

Tôi đã sử dụng

cv.LoadImage

Thay vào đó, không có vấn đề gì trong các ứng dụng khác. Tuy nhiên, cv.iplimage không có hàng thuộc tính, col hoặc kích thước. Bất cứ ai có thể cho tôi một gợi ý, làm thế nào để giải quyết vấn đề này?

Hướng dẫn python resize image by factor - python thay đổi kích thước hình ảnh theo yếu tố

Lướt

2.6722 Huy hiệu vàng15 Huy hiệu bạc29 Huy hiệu đồng2 gold badges15 silver badges29 bronze badges

hỏi ngày 16 tháng 11 năm 2010 lúc 14:55Nov 16, 2010 at 14:55

1

Nếu bạn muốn sử dụng CV2, bạn cần sử dụng chức năng

cv.LoadImageM
2.

Ví dụ, điều này sẽ thay đổi kích thước cả hai trục bằng một nửa:

small = cv2.resize(image, (0,0), fx=0.5, fy=0.5) 

và điều này sẽ thay đổi kích thước hình ảnh để có 100 col (chiều rộng) và 50 hàng (chiều cao):

resized_image = cv2.resize(image, (100, 50)) 

Một tùy chọn khác là sử dụng mô -đun

cv.LoadImageM
3, bằng cách sử dụng:

small = scipy.misc.imresize(image, 0.5)

Rõ ràng có nhiều tùy chọn hơn bạn có thể đọc trong tài liệu của các chức năng đó (cv2.resize, scipy.misc.imresize).


Cập nhật: Theo tài liệu SCIPY:
According to the SciPy documentation:

cv.LoadImageM
4 không được chấp nhận trong SCIPY 1.0.0 và sẽ bị xóa trong 1.2.0. Sử dụng
cv.LoadImageM
5 thay thế.deprecated in SciPy 1.0.0, and will be removed in 1.2.0.
Use
cv.LoadImageM
5 instead.

Lưu ý rằng nếu bạn đang tìm cách thay đổi kích thước theo một yếu tố, bạn thực sự có thể muốn

cv.LoadImageM
6.resize by a factor, you may actually want
cv.LoadImageM
6.

Fabian N.

3.7392 huy hiệu vàng21 Huy hiệu bạc45 Huy hiệu đồng2 gold badges21 silver badges45 bronze badges

Đã trả lời ngày 12 tháng 9 năm 2013 lúc 14:51Sep 12, 2013 at 14:51

Emememememem

5.4361 Huy hiệu vàng23 Huy hiệu bạc29 Huy hiệu đồng1 gold badge23 silver badges29 bronze badges

10

Ví dụ nhân đôi kích thước hình ảnh

Có hai cách để thay đổi kích thước một hình ảnh. Kích thước mới có thể được chỉ định:

  1. Manually;

    cv.LoadImageM
    
    7

    cv.LoadImageM
    
    8

  2. Bởi một yếu tố tỷ lệ.

    cv.LoadImageM
    
    9, trong đó FX là hệ số tỷ lệ dọc theo trục ngang và FY dọc theo trục thẳng đứng.fx is the scaling factor along the horizontal axis and fy along the vertical axis.

Để thu nhỏ một hình ảnh, nó thường sẽ trông tốt nhất với nội suy inter_area, trong khi để phóng to một hình ảnh, nó thường sẽ trông tốt nhất với inter_cubic (chậm) hoặc inter_linear (nhanh hơn nhưng trông vẫn ổn).

Ví dụ thu nhỏ hình ảnh để phù hợp với chiều cao/chiều rộng tối đa (tỷ lệ khung hình)

import cv2

img = cv2.imread('YOUR_PATH_TO_IMG')

height, width = img.shape[:2]
max_height = 300
max_width = 300

# only shrink if img is bigger than required
if max_height < height or max_width < width:
    # get scaling factor
    scaling_factor = max_height / float(height)
    if max_width/float(width) < scaling_factor:
        scaling_factor = max_width / float(width)
    # resize image
    img = cv2.resize(img, None, fx=scaling_factor, fy=scaling_factor, interpolation=cv2.INTER_AREA)

cv2.imshow("Shrinked image", img)
key = cv2.waitKey()

Sử dụng mã của bạn với CV2

import cv2 as cv

im = cv.imread(path)

height, width = im.shape[:2]

thumbnail = cv.resize(im, (round(width / 10), round(height / 10)), interpolation=cv.INTER_AREA)

cv.imshow('exampleshq', thumbnail)
cv.waitKey(0)
cv.destroyAllWindows()

Đã trả lời ngày 10 tháng 2 năm 2017 lúc 17:36Feb 10, 2017 at 17:36

Hướng dẫn python resize image by factor - python thay đổi kích thước hình ảnh theo yếu tố

6

Bạn có thể sử dụng chức năng GetSize để có được những thông tin đó, CV.GetSize (IM) sẽ trả về một tuple với chiều rộng và chiều cao của hình ảnh. Bạn cũng có thể sử dụng im.depth và img.nchan để có thêm một số thông tin.

Và để thay đổi kích thước một hình ảnh, tôi sẽ sử dụng một quy trình hơi khác, với một hình ảnh khác thay vì ma trận. Tốt hơn là cố gắng làm việc với cùng loại dữ liệu:

size = cv.GetSize(im)
thumbnail = cv.CreateImage( ( size[0] / 10, size[1] / 10), im.depth, im.nChannels)
cv.Resize(im, thumbnail)

Hi vọng điêu nay co ich ;)

Julien

Đã trả lời ngày 20 tháng 11 năm 2011 lúc 22:23Nov 20, 2011 at 22:23

jlengrandjlengrandjlengrand

11.5K13 Huy hiệu vàng56 Huy hiệu bạc82 Huy hiệu đồng13 gold badges56 silver badges82 bronze badges

Đây là một chức năng để nâng cấp hoặc hạ thấp hình ảnh theo chiều rộng hoặc chiều cao mong muốn trong khi duy trì tỷ lệ khung hình

# Resizes a image and maintains aspect ratio
def maintain_aspect_ratio_resize(image, width=None, height=None, inter=cv2.INTER_AREA):
    # Grab the image size and initialize dimensions
    dim = None
    (h, w) = image.shape[:2]

    # Return original image if no need to resize
    if width is None and height is None:
        return image

    # We are resizing height if width is none
    if width is None:
        # Calculate the ratio of the height and construct the dimensions
        r = height / float(h)
        dim = (int(w * r), height)
    # We are resizing width if height is none
    else:
        # Calculate the ratio of the width and construct the dimensions
        r = width / float(w)
        dim = (width, int(h * r))

    # Return the resized image
    return cv2.resize(image, dim, interpolation=inter)

Cách sử dụng

cv.LoadImageM
0

Sử dụng hình ảnh ví dụ này

Hướng dẫn python resize image by factor - python thay đổi kích thước hình ảnh theo yếu tố

Đơn giản chỉ cần hạ thấp xuống

cv.LoadImage
0 (trái) hoặc cao cấp thành
cv.LoadImage
1 (phải)

Hướng dẫn python resize image by factor - python thay đổi kích thước hình ảnh theo yếu tố
Hướng dẫn python resize image by factor - python thay đổi kích thước hình ảnh theo yếu tố

Đã trả lời ngày 4 tháng 9 năm 2019 lúc 3:19Sep 4, 2019 at 3:19

Hướng dẫn python resize image by factor - python thay đổi kích thước hình ảnh theo yếu tố

NathancyNathancynathancy

38.1K13 Huy hiệu vàng98 Huy hiệu bạc119 Huy hiệu đồng13 gold badges98 silver badges119 bronze badges

cv.LoadImageM
1

Đã trả lời ngày 20 tháng 7 năm 2018 lúc 22:49Jul 20, 2018 at 22:49

Hướng dẫn python resize image by factor - python thay đổi kích thước hình ảnh theo yếu tố

Mathandymathandymathandy

1.59221 Huy hiệu bạc29 Huy hiệu đồng21 silver badges29 bronze badges

1

Làm thế nào để bạn thay đổi kích thước một hình ảnh theo tỷ lệ trong Python?

Cách thay đổi kích thước hình ảnh theo tỷ lệ khung hình cố định với thư viện PIL của Python..
Dòng đầu tiên: Xác định một số cố định để tạo tỷ lệ ..
Dòng thứ hai: Mở hình ảnh ..
Dòng thứ ba: Tạo phần trăm chiều cao theo giá trị cố định của bạn ..
Dòng thứ tư: Tạo chiều rộng hình ảnh bằng cách nhân nó với giá trị chiều cao tỷ lệ ..

Làm thế nào để bạn mở rộng một hình ảnh trong Python?

Thay đổi kích thước hình ảnh trong Python với gối..
Nhập lớp hình ảnh PIL: Từ hình ảnh nhập PIL ..
Tải hình ảnh từ một tệp với hàm open (): Image = Image.....
Gọi phương thức Resize () trên thể hiện hình ảnh mới, chuyển đối số Tuple với hai số nguyên để chỉ định chiều rộng và chiều cao mà bạn mong muốn: Image = Image ..

FX và FY trong CV2 thay đổi kích thước là gì?

DSIZE: Đó là kích thước mong muốn của hình ảnh đầu ra, nó có thể là chiều cao và chiều rộng mới.FX: Hệ số tỷ lệ dọc theo trục ngang.FY: Hệ số tỷ lệ dọc theo trục dọc.Nội suy: Nó cho chúng ta tùy chọn các phương pháp khác nhau để thay đổi kích thước hình ảnh.Scale factor along the horizontal axis. fy : Scale factor along the vertical axis. interpolation : It gives us the option of different methods of resizing the image.

Làm thế nào để tôi thay đổi kích thước thủ công một hình ảnh trong Python?

Để thay đổi kích thước một hình ảnh, bạn gọi phương thức thay đổi kích thước () trên nó, chuyển theo đối số tuple hai số nguyên đại diện cho chiều rộng và chiều cao của hình ảnh thay đổi kích thước.Hàm không sửa đổi hình ảnh đã sử dụng;Thay vào đó, nó trả về một hình ảnh khác với kích thước mới.call the resize() method on it, passing in a two-integer tuple argument representing the width and height of the resized image. The function doesn't modify the used image; it instead returns another Image with the new dimensions.