Dibesarkan di pantai timur Amerika Serikat, saya kira saya seharusnya sudah terbiasa dengan salju sekarang - tetapi ternyata tidak. Sebagai seorang anak, saya menyukai salju. Saya suka naik eretan, seluncur salju, dan adu bola salju Show Tapi sekarang, sebagai orang dewasa, salju hanya berarti ketidaknyamanan. Itu berarti perjalanan akan menjadi mengerikan. Itu berarti tidak bisa mengemudi ke gym. Dan itu berarti terjebak di apartemen Yang mengatakan, saya mengambil hari salju ini di pantai timur dan menulis posting blog tentang menangkap peristiwa klik mouse dengan Python dan OpenCV Dalam contoh ini, kami akan mengeklik dan menyeret Wilayah Minat (ROI) persegi panjang dan memotongnya dari gambar kami. Teknik ini sangat membantu jika Anda memberi label pada data sebagai input ke algoritme klasifikasi gambar Jadi, jika Anda mencoba memahami cara kerja peristiwa klik mouse dengan Python dan OpenCV, maka tidak perlu mencari lagi. Posting blog ini akan menunjukkan hal itu kepada Anda Mencari kode sumber untuk posting ini?Versi OpenCV dan Python Mari kita lanjutkan dan mulai contoh ini. Buka file baru, beri nama # import the necessary packages import argparse import cv2 # initialize the list of reference points and boolean indicating # whether cropping is being performed or not refPt = [] cropping = False def click_and_crop(event, x, y, flags, param): # grab references to the global variables global refPt, cropping # if the left mouse button was clicked, record the starting # (x, y) coordinates and indicate that cropping is being # performed if event == cv2.EVENT_LBUTTONDOWN: refPt = [(x, y)] cropping = True # check to see if the left mouse button was released elif event == cv2.EVENT_LBUTTONUP: # record the ending (x, y) coordinates and indicate that # the cropping operation is finished refPt.append((x, y)) cropping = False # draw a rectangle around the region of interest cv2.rectangle(image, refPt[0], refPt[1], (0, 255, 0), 2) cv2.imshow("image", image) Kami akan mulai dengan mengimpor dua paket yang diperlukan. Kami juga mendefinisikan dua variabel global pada Baris 7 dan 8. Untuk memproses peristiwa klik mouse, kami mendefinisikan fungsi callback Agar fungsi kita dapat menangani relai, kita perlu menerima 5 argumen
Dari sana kami mengambil referensi ke daftar Kami kemudian memeriksa Baris 17 untuk melihat apakah tombol kiri mouse kami ditekan. Jika ya, kami merekam (x, y)-koordinat acara dan menunjukkan bahwa kami sekarang dalam "mode tanam" Pada titik ini kami akan menyeret keluar area persegi panjang dari gambar yang ingin kami pangkas. Setelah selesai menyeret keluar wilayah, kami melepaskan tombol kiri mouse — Garis 22 menangani saat tombol kiri mouse dilepaskan dan memperbarui daftar poin yang berisi ROI kami. Kami juga menggambar persegi panjang yang mewakili ROI pada Baris 29 dan 30 Sekarang, mari kita lihat bagaimana kita dapat menggunakan fungsi ini untuk memotong gambar # construct the argument parser and parse the arguments ap = argparse.ArgumentParser() ap.add_argument("-i", "--image", required=True, help="Path to the image") args = vars(ap.parse_args()) # load the image, clone it, and setup the mouse callback function image = cv2.imread(args["image"]) clone = image.copy() cv2.namedWindow("image") cv2.setMouseCallback("image", click_and_crop) # keep looping until the 'q' key is pressed while True: # display the image and wait for a keypress cv2.imshow("image", image) key = cv2.waitKey(1) & 0xFF # if the 'r' key is pressed, reset the cropping region if key == ord("r"): image = clone.copy() # if the 'c' key is pressed, break from the loop elif key == ord("c"): break # if there are two reference points, then crop the region of interest # from teh image and display it if len(refPt) == 2: roi = clone[refPt[0][1]:refPt[1][1], refPt[0][0]:refPt[1][0]] cv2.imshow("ROI", roi) cv2.waitKey(0) # close all open windows cv2.destroyAllWindows()_ Kita mulai dengan menguraikan argumen baris perintah kita pada Baris 33-35. Kami hanya membutuhkan satu sakelar di sini, # construct the argument parser and parse the arguments ap = argparse.ArgumentParser() ap.add_argument("-i", "--image", required=True, help="Path to the image") args = vars(ap.parse_args()) # load the image, clone it, and setup the mouse callback function image = cv2.imread(args["image"]) clone = image.copy() cv2.namedWindow("image") cv2.setMouseCallback("image", click_and_crop) # keep looping until the 'q' key is pressed while True: # display the image and wait for a keypress cv2.imshow("image", image) key = cv2.waitKey(1) & 0xFF # if the 'r' key is pressed, reset the cropping region if key == ord("r"): image = clone.copy() # if the 'c' key is pressed, break from the loop elif key == ord("c"): break # if there are two reference points, then crop the region of interest # from teh image and display it if len(refPt) == 2: roi = clone[refPt[0][1]:refPt[1][1], refPt[0][0]:refPt[1][0]] cv2.imshow("ROI", roi) cv2.waitKey(0) # close all open windows cv2.destroyAllWindows()2 , yang merupakan jalur ke gambar yang ingin kami pangkas. Gambar ini kemudian dimuat dan digandakan pada Baris 38 dan 39. Kita membuat salinan gambar yang dalam sehingga kita dapat menggambar kotak pembatas persegi panjang pada Baris 29 tanpa merusak gambar aslinya Baris 40 dan 41 menangani pendaftaran fungsi callback # construct the argument parser and parse the arguments ap = argparse.ArgumentParser() ap.add_argument("-i", "--image", required=True, help="Path to the image") args = vars(ap.parse_args()) # load the image, clone it, and setup the mouse callback function image = cv2.imread(args["image"]) clone = image.copy() cv2.namedWindow("image") cv2.setMouseCallback("image", click_and_crop) # keep looping until the 'q' key is pressed while True: # display the image and wait for a keypress cv2.imshow("image", image) key = cv2.waitKey(1) & 0xFF # if the 'r' key is pressed, reset the cropping region if key == ord("r"): image = clone.copy() # if the 'c' key is pressed, break from the loop elif key == ord("c"): break # if there are two reference points, then crop the region of interest # from teh image and display it if len(refPt) == 2: roi = clone[refPt[0][1]:refPt[1][1], refPt[0][0]:refPt[1][0]] cv2.imshow("ROI", roi) cv2.waitKey(0) # close all open windows cv2.destroyAllWindows()_4 untuk membuat jendela bernama "gambar". Dan kami kemudian mengatur panggilan balik mouse dengan memanggil # construct the argument parser and parse the arguments ap = argparse.ArgumentParser() ap.add_argument("-i", "--image", required=True, help="Path to the image") args = vars(ap.parse_args()) # load the image, clone it, and setup the mouse callback function image = cv2.imread(args["image"]) clone = image.copy() cv2.namedWindow("image") cv2.setMouseCallback("image", click_and_crop) # keep looping until the 'q' key is pressed while True: # display the image and wait for a keypress cv2.imshow("image", image) key = cv2.waitKey(1) & 0xFF # if the 'r' key is pressed, reset the cropping region if key == ord("r"): image = clone.copy() # if the 'c' key is pressed, break from the loop elif key == ord("c"): break # if there are two reference points, then crop the region of interest # from teh image and display it if len(refPt) == 2: roi = clone[refPt[0][1]:refPt[1][1], refPt[0][0]:refPt[1][0]] cv2.imshow("ROI", roi) cv2.waitKey(0) # close all open windows cv2.destroyAllWindows()5 , menyediakan jendela "gambar" bernama kami dan fungsi panggilan balik click_and_crop kamiDari sini, sisa contoh ini hanya menyatukan potongan-potongan itu Kami memulai loop pada Baris 44 yang (1) menampilkan gambar kami di layar dan (2) menunggu penekanan tombol Ini adalah titik di mana kami memilih wilayah persegi panjang yang ingin kami pangkas dari gambar Jika kami menekan tombol # construct the argument parser and parse the arguments ap = argparse.ArgumentParser() ap.add_argument("-i", "--image", required=True, help="Path to the image") args = vars(ap.parse_args()) # load the image, clone it, and setup the mouse callback function image = cv2.imread(args["image"]) clone = image.copy() cv2.namedWindow("image") cv2.setMouseCallback("image", click_and_crop) # keep looping until the 'q' key is pressed while True: # display the image and wait for a keypress cv2.imshow("image", image) key = cv2.waitKey(1) & 0xFF # if the 'r' key is pressed, reset the cropping region if key == ord("r"): image = clone.copy() # if the 'c' key is pressed, break from the loop elif key == ord("c"): break # if there are two reference points, then crop the region of interest # from teh image and display it if len(refPt) == 2: roi = clone[refPt[0][1]:refPt[1][1], refPt[0][0]:refPt[1][0]] cv2.imshow("ROI", roi) cv2.waitKey(0) # close all open windows cv2.destroyAllWindows()_7 setelah memilih wilayah yang akan dipotong, kami mengatur ulang pemotongan kami Dan jika kita menekan tombol # construct the argument parser and parse the arguments ap = argparse.ArgumentParser() ap.add_argument("-i", "--image", required=True, help="Path to the image") args = vars(ap.parse_args()) # load the image, clone it, and setup the mouse callback function image = cv2.imread(args["image"]) clone = image.copy() cv2.namedWindow("image") cv2.setMouseCallback("image", click_and_crop) # keep looping until the 'q' key is pressed while True: # display the image and wait for a keypress cv2.imshow("image", image) key = cv2.waitKey(1) & 0xFF # if the 'r' key is pressed, reset the cropping region if key == ord("r"): image = clone.copy() # if the 'c' key is pressed, break from the loop elif key == ord("c"): break # if there are two reference points, then crop the region of interest # from teh image and display it if len(refPt) == 2: roi = clone[refPt[0][1]:refPt[1][1], refPt[0][0]:refPt[1][0]] cv2.imshow("ROI", roi) cv2.waitKey(0) # close all open windows cv2.destroyAllWindows()_8, maka kita keluar dari loop dan melakukan pemotongan yang sebenarnya pada Baris 59-62 Terakhir, kami membersihkan dan menutup semua jendela yang terbuka di Jalur 65 Acara mouse OpenCV sedang beraksiSekarang setelah contoh kita dikodekan, mari kita coba. Buka terminal dan jalankan perintah berikut $ python click_and_crop.py --image jurassic_park_kitchen.jpg Anda pertama-tama akan disajikan dengan gambar di layar Anda Gambar 1. Gambar asli kami ditampilkan di layarPilih wilayah yang ingin Anda potong dengan mengklik, menyeret, dan melepaskan Gambar 2. Mengklik dan menyeret wilayah gambar yang ingin kita potongTerakhir, tekan tombol # construct the argument parser and parse the arguments ap = argparse.ArgumentParser() ap.add_argument("-i", "--image", required=True, help="Path to the image") args = vars(ap.parse_args()) # load the image, clone it, and setup the mouse callback function image = cv2.imread(args["image"]) clone = image.copy() cv2.namedWindow("image") cv2.setMouseCallback("image", click_and_crop) # keep looping until the 'q' key is pressed while True: # display the image and wait for a keypress cv2.imshow("image", image) key = cv2.waitKey(1) & 0xFF # if the 'r' key is pressed, reset the cropping region if key == ord("r"): image = clone.copy() # if the 'c' key is pressed, break from the loop elif key == ord("c"): break # if there are two reference points, then crop the region of interest # from teh image and display it if len(refPt) == 2: roi = clone[refPt[0][1]:refPt[1][1], refPt[0][0]:refPt[1][0]] cv2.imshow("ROI", roi) cv2.waitKey(0) # close all open windows cv2.destroyAllWindows()_8 untuk melakukan pemotonganGambar 3. Memotong gambar yang sebenarnya Seperti yang Anda lihat, kami telah berhasil memotong wajah Tim dari gambar Ini adalah contoh lain di mana kita memotong Velociraptor Gambar 4. Contoh lain dari memotong gambar kita, kali ini mengekstrak kepala Velociraptor dari gambarJadi begitulah — metode sederhana untuk menangkap peristiwa mouse untuk memotong gambar menggunakan Python dan OpenCV Apa berikutnya?Informasi kursus Saya sangat percaya bahwa jika Anda memiliki guru yang tepat, Anda dapat menguasai visi komputer dan pembelajaran mendalam Apakah menurut Anda mempelajari visi komputer dan pembelajaran mendalam harus memakan waktu, berlebihan, dan rumit? Bukan itu masalahnya Yang Anda perlukan untuk menguasai visi komputer dan pembelajaran mendalam adalah agar seseorang menjelaskan berbagai hal kepada Anda dengan istilah yang sederhana dan intuitif. Dan itulah yang saya lakukan. Misi saya adalah mengubah pendidikan dan seberapa rumit topik Kecerdasan Buatan diajarkan Jika Anda serius mempelajari visi komputer, perhentian Anda berikutnya adalah Universitas PyImageSearch, visi komputer terlengkap, pembelajaran mendalam, dan kursus OpenCV online hari ini. Di sini Anda akan mempelajari cara menerapkan visi komputer dengan sukses dan percaya diri pada pekerjaan, penelitian, dan proyek Anda. Bergabunglah dengan saya dalam penguasaan visi komputer Di dalam Universitas PyImageSearch Anda akan menemukan
Klik di sini untuk bergabung dengan Universitas PyImageSearch RingkasanDalam postingan blog ini kita belajar cara menangkap event mouse menggunakan OpenCV dan Python. Meskipun postingan ini tidak memberikan ikhtisar yang lengkap dan menyeluruh tentang semua peristiwa mouse yang dapat Anda tangkap, postingan ini meletakkan dasar untuk kemungkinan yang dapat terjadi Posting ini juga menunjukkan bagaimana Anda dapat dengan cepat memotong dan mengekstrak wilayah gambar, yang sangat berguna saat membuat data pelatihan untuk detektor objek kustom Anda sendiri Unduh Kode Sumber dan Panduan Sumber Daya 17 halaman GRATISMasukkan alamat email Anda di bawah ini untuk mendapatkan a. zip kode dan Panduan Sumber Daya 17 halaman GRATIS tentang Computer Vision, OpenCV, dan Deep Learning. Di dalamnya Anda akan menemukan tutorial, buku, kursus, dan perpustakaan pilihan saya untuk membantu Anda menguasai CV dan DL Bagaimana Anda menemukan koordinat suatu titik dalam gambar dengan Python?Sekarang mari kita lihat bagaimana menampilkan koordinat titik-titik yang diklik pada gambar. . Impor modul cv2 Impor gambar menggunakan cv2. imread() fungsi Tampilkan gambar gambar menggunakan cv2. fungsi imshow() Hubungi cv2. . Dalam fungsi yang ditentukan pengguna, periksa klik kiri mouse menggunakan cv2 Bagaimana Anda menemukan koordinat objek dalam gambar?Dapatkan Koordinat dari Gambar . Buka bilah alat gambar. Klik gambar untuk membuka toolbar gambar Pilih alat koordinat. Pilih alat koordinat di toolbar Klik titik gambar. . Salin koordinat gambar ke papan klip. . Tempel koordinat gambar ke dalam ekspresi Bagaimana cara menemukan koordinat gambar di cv2?Impor pustaka OpenCV yang diperlukan. . Tentukan fungsi panggilan balik mouse untuk menampilkan koordinat titik yang diklik pada gambar masukan. . Baca gambar input menggunakan cv2. . Tentukan jendela baru dan ikat fungsi panggilan balik yang ditentukan di atas ke jendela menggunakan cv2. . Menampilkan jendela gambar Bagaimana Anda menemukan koordinat XY di Python?Cara. Hitung koordinat XY menggunakan Python . Alat Tambahkan Koordinat XY membuat bidang baru untuk Point_X dan POINT_Y, menghitung nilainya, dan menambahkan POINT_Z, dan POINT_M jika fitur input diaktifkan Z dan M. . Alur kerja berikutnya menggunakan sintaks Hitung Bidang untuk mengakses properti kelas Luas |