Saya ingin menggunakan OpenCV2.0 dan Python2.6 untuk menampilkan ukuran gambar. Saya menggunakan dan mengadopsi contoh di http://opencv.willowgarage.com/documentation/python/cookbook.html tapi sayangnya kode ini untuk OpenCV2.1 dan sepertinya tidak dapat digunakan pada 2.0. Ini kode saya:
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)
Karena saya tidak bisa menggunakan
cv.LoadImageM
Saya menggunakan
cv.LoadImage
sebagai gantinya, yang tidak ada masalah di aplikasi lain. Namun demikian cv.iplimage tidak memiliki baris atribut, cols atau ukuran. Adakah yang bisa memberi saya petunjuk, bagaimana mengatasi masalah ini? Terima kasih.
Jawaban:
Jika Anda ingin menggunakan CV2, Anda harus menggunakan
resize
fungsinya.Misalnya, ini akan mengubah ukuran kedua sumbu setengah:
dan ini akan mengubah ukuran gambar menjadi 100 cols (lebar) dan 50 baris (tinggi):
Pilihan lain adalah menggunakan
scipy
modul, dengan menggunakan:Jelas ada lebih banyak opsi yang dapat Anda baca dalam dokumentasi fungsi-fungsi tersebut ( cv2.resize , scipy.misc.imresize ).
Pembaruan:
Menurut dokumentasi SciPy :
Perhatikan bahwa jika Anda ingin mengubah ukuran berdasarkan faktor , Anda mungkin sebenarnya menginginkannya
skimage.transform.rescale
.sumber
Contoh menggandakan ukuran gambar
Ada dua cara untuk mengubah ukuran gambar. Ukuran baru dapat ditentukan:
Secara manual;
height, width = src.shape[:2]
dst = cv2.resize(src, (2*width, 2*height), interpolation = cv2.INTER_CUBIC)
Dengan faktor penskalaan.
dst = cv2.resize(src, None, fx = 2, fy = 2, interpolation = cv2.INTER_CUBIC)
, di mana fx adalah faktor penskalaan sepanjang sumbu horizontal dan fy sepanjang sumbu vertikal.Untuk mengecilkan gambar, biasanya akan terlihat paling baik dengan interpolasi INTER_AREA, sedangkan untuk memperbesar gambar, biasanya akan terlihat lebih baik dengan INTER_CUBIC (lambat) atau INTER_LINEAR (lebih cepat tapi tetap terlihat OK).
Contoh menyusutkan gambar agar sesuai dengan tinggi / lebar maks (menjaga aspek rasio)
Menggunakan kode Anda dengan cv2
sumber
src = cv2.imread('YOUR_PATH_TO_IMG')
dan mengedit 'YOUR_PATH_TO_IMG' ke jalur gambar Anda sendiri?cv2.resize
secara otomatis menggunakan bantalan? berapa ukuran jendela yang dibuat menggunakan ukuran output yang diinginkan(width/10, height/10)
?Anda bisa menggunakan fungsi GetSize untuk mendapatkan informasi itu, cv.GetSize (im) akan mengembalikan tuple dengan lebar dan tinggi gambar. Anda juga dapat menggunakan im.depth dan img.nChan untuk mendapatkan informasi lebih lanjut.
Dan untuk mengubah ukuran gambar, saya akan menggunakan proses yang sedikit berbeda, dengan gambar lain, bukan matriks. Lebih baik mencoba bekerja dengan tipe data yang sama:
Semoga ini membantu ;)
Julien
sumber
sumber
cv2.resize
secara otomatis menggunakan bantalan? berapa ukuran jendela yang dibuat menggunakan(w, target_height)
argumen?Berikut adalah fungsi untuk memperbesar atau memperkecil skala gambar dengan lebar atau tinggi yang diinginkan sambil mempertahankan rasio aspek
Pemakaian
Menggunakan contoh gambar ini
Cukup turunkan ke
width=100
(kiri) atau naik kewidth=300
(kanan)sumber