国产av日韩一区二区三区精品,成人性爱视频在线观看,国产,欧美,日韩,一区,www.成色av久久成人,2222eeee成人天堂

Jadual Kandungan
Cara menyelesaikan masalah imej telus di mana hasil transformasi unjuran opencv.js kosong
Rumah hujung hadapan web tutorial js Bagaimana menyelesaikan masalah yang hasil transformasi unjuran opencv.js adalah gambar telus kosong?

Bagaimana menyelesaikan masalah yang hasil transformasi unjuran opencv.js adalah gambar telus kosong?

Apr 04, 2025 pm 03:45 PM
ai Penyelesaian acara klik

Cara menyelesaikan masalah imej telus di mana hasil transformasi unjuran opencv.js kosong

Apabila menggunakan OpenCV.js untuk pemprosesan imej, kadang -kadang anda akan menghadapi masalah imej telus dengan hasil imej kosong selepas transformasi unjuran. Berikut adalah masalah yang saya hadapi dan penyelesaiannya.

Apabila saya memproses imej, kod itu dapat berjaya mengenal pasti empat koordinat dokumen itu, tetapi apabila ia sampai ke langkah transformasi unjuran, hasilnya sentiasa gambar telus kosong dan tidak ada kesilapan. Berikut adalah sebahagian daripada kod untuk transformasi unjuran yang saya gunakan:

 // Transformasi unjuran Let srcquad = cv.matFromArray (4, 1, cv.cv_32fc2, points.flat ());
Let dstquad = cv.matFromArray (4, 1, cv.cv_32fc2, [0, 0, img.cols, 0, img.cols, img.rows, 0, img.rows]);
biarkan transformx = cv.getPerspectiveTransform (srcquad, dstquad);
biarkan sasaran = cv.mat baru ();
cv.warpperspective (IMG, Target, transmtx, cv.size baru (img.cols, img.rows));
// tunjukkan hasil cv.imshow (kanvas, sasaran);

Untuk menyelesaikan masalah ini, saya membuat penambahbaikan berikut:

  1. Tetapkan saiz kanvas : Selepas imej dimuatkan, iaitu, dalam fungsi Imgelement.onload, tetapkan lebar dan ketinggian kanvas untuk selaras dengan saiz imej.
  2. Tambah pengendalian ralat : Apabila pemuatan imej gagal, iaitu, dalam fungsi Imgelement.onerror, tambahkan pengendalian ralat untuk menangkap ralat pemuatan imej.

Inilah kod lengkap yang diperbaiki:

 

    <meta charset="utf-8">
    <meta name="viewport" content="width = peranti-lebar, skala awal = 1.0">
    <tirtment> OpenCv.js Contoh 


    <script async src="https://docs.opencv.org/4.5.5/opencv.js" onload="onopencvready ();"> </script>
    <canvas id="canvasOutput"> </canvas>
    <script>
        fungsi onOpencvready () {
            console.log ("OpenCv.js memuat selesai.");
            processImage ();
        }

        fungsi tidur (MS) {
            kembali janji baru (resolve => setTimeout (resolve, ms));
        }

        ProcessImage fungsi async () {
            menunggu tidur (3000); // tunggu selama 3 saat biarkan imageurl = "../archives/111.jpg";
            biarkan imgelement = imej baru ();
            imgelement.src = imageUrl;
            var img;

            // Muatkan imej imgelement.onload = function () {
                Cuba {
                    img = cv.imread (imgElement);
                    jika (img.empty ()) {
                        Console.error ("Imej tidak dapat dibaca.");
                        kembali;
                    }

                    // Dapatkan elemen kanvas dan tetapkan saiz biarkan kanvas = document.getElementById (&#39;CanvasOutput&#39;);
                    kanvas.width = img.cols;
                    kanvas.height = img.rows;

                    // Reset saiz imej biarkan dsize = cv.size baru (img.cols, img.rows);
                    biarkan dst = cv.mat baru ();
                    cv.resize (img, dst, dsize, 0, 0, cv.inter_area);

                    // Tukar ke Console.log imej skala kelabu ("Sebelum penukaran:", img);
                    biarkan kelabu = cv.mat baru (); // Buat objek tikar baru untuk menyimpan imej kelabu cv.cvtcolor (DST, Grey, cv.color_bgr2gray); // Gunakan konsol penukaran yang sesuai ("selepas penukaran:", kelabu);

                    // Gaussian Filter cv.gaussianblur (kelabu, kelabu, cv.size baru (11, 11), 0, 0);
                    cv.imshow (kanvas, kelabu);
                    cv.canny (kelabu, kelabu, 20, 50, 3);

                    biarkan kontur = baru cv.matvector ();
                    biarkan hierarki = baru cv.mat ();
                    cv.findConTours (kelabu, kontur, hierarki, cv.retr_ccomp, cv.chain_approx_none);

                    Biarkan indeks = 0, maxArea = 0;
                    const area = img.cols * img.rows;
                    untuk (biarkan i = 0; i <contours.size (); i) {
                        biarkan tempeAa = math.abs (cv.contourArea (contours.get (i)));
                        jika (temparea> maxarea && temparea> 0.3 * kawasan) {
                            indeks = i;
                            MaxArea = temparea;
                        }
                    }

                    jika (maxarea === 0) kembali;
                    const foundContour = contours.get (index);
                    const arcl = cv.arclength (foundContour, true);
                    biarkan lebihan = cv.mat baru ();

                    // anggaran polygon cv.approxpolydp (foundContour, kira -kira, 0.01 * arcl, true);

                    jika (kira -kira.total () === 4) {
                        biarkan mata = [];
                        const data32s = rox.data32s;
                        untuk (biarkan i = 0, len = data32s.length / 2; i <len; i) {
                            mata [i] = {x: data32s [i * 2], y: data32s [i * 2 1]};
                        }
                        Console.log ("titik kuadrilateral dikesan:", mata);

                        // Transformasi unjuran biarkan srcquad = cv.matFromArray (4, 1, cv.cv_32fc2, points.flat ());
                        Let dstquad = cv.matFromArray (4, 1, cv.cv_32fc2, [0, 0, img.cols, 0, img.cols, img.rows, 0, img.rows]);
                        biarkan transformtx = cv.getPerspectiveTransform (srcquad, dstquad);
                        biarkan sasaran = cv.mat baru ();
                        cv.warpperspective (IMG, Target, transmtx, cv.size baru (img.cols, img.rows));

                        // tunjukkan hasil cv.imshow (kanvas, sasaran);

                        // Buat elemen kanvas sementara biarkan tempCanvas = document.createElement (&#39;kanvas&#39;);
                        tempcanvas.width = target.cols;
                        tempcanvas.height = target.rows;
                        biarkan tempctx = tempCanvas.getContext (&#39;2d&#39;);

                        // tukar cv.mat ke imagedata
                        Let ImageData = new ImageData (baru uint8clampedArray (target.data), target.cols, target.rows);

                        // lukis imagedata pada kanvas sementara tempctx.putimagedata (ImageData, 0, 0);

                        // menjana kanvas ke objek gumpalan tempcanvas.toblob ((blob) => {
                            // Buat objek URL biarkan url = url.createObjectUrl (blob);
                            // Buat elemen a dan tetapkan atributnya biarkan a = document.createeelement (&#39;a&#39;);
                            A.Href = url;
                            A.Download = &#39;Processed_image.png&#39;; // Tetapkan nama fail muat turun // Tambah elemen ke dokumen badan.body.appendchild (a);
                            // mencetuskan acara klik untuk mula memuat turun a.click ();
                            // Keluarkan elemen dokumen.body.removechild (a);
                            // Siaran url objek url.RevokeObjectUrl (url);
                        }, &#39;imej/png&#39;);

                        // sasaran memori percuma.delete (); // sasaran percuma di sini, jika tidak, kebocoran memori}

                    // memori percuma img.delete ();
                    dst.delete ();
                    kelabu.delete (); // Lepaskan tikar imej skala kelabu
                    contours.delete ();
                    hierarki.delete ();
                    kira -kira.delete ();
                    foundContour.delete ();
                } menangkap (err) {
                    Console.error ("Ralat pemprosesan imej:", err);
                }
            }

            imgelement.onerror = function () {
                Console.error ("Imej tidak boleh dimuatkan.");
            };
        }
    </script>

</tirtment>

Melalui penambahbaikan di atas, saya berjaya menyelesaikan masalah bahawa hasil transformasi unjuran adalah gambar telus kosong. Semoga penambahbaikan ini dapat membantu semua orang.

Atas ialah kandungan terperinci Bagaimana menyelesaikan masalah yang hasil transformasi unjuran opencv.js adalah gambar telus kosong?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn

Alat AI Hot

Undress AI Tool

Undress AI Tool

Gambar buka pakaian secara percuma

Undresser.AI Undress

Undresser.AI Undress

Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover

AI Clothes Remover

Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Clothoff.io

Clothoff.io

Penyingkiran pakaian AI

Video Face Swap

Video Face Swap

Tukar muka dalam mana-mana video dengan mudah menggunakan alat tukar muka AI percuma kami!

Alat panas

Notepad++7.3.1

Notepad++7.3.1

Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina

SublimeText3 versi Cina

Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1

Hantar Studio 13.0.1

Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6

Dreamweaver CS6

Alat pembangunan web visual

SublimeText3 versi Mac

SublimeText3 versi Mac

Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Topik panas

Tutorial PHP
1500
86
PHP memanggil AI Pembantu Suara Pintar PHP Pembinaan Sistem Interaksi Suara PHP PHP memanggil AI Pembantu Suara Pintar PHP Pembinaan Sistem Interaksi Suara PHP Jul 25, 2025 pm 08:45 PM

Input suara pengguna ditangkap dan dihantar ke backend PHP melalui API Mediarecorder JavaScript front-end; 2. PHP menjimatkan audio sebagai fail sementara dan memanggil STTAPI (seperti Pengiktirafan Suara Google atau Baidu) untuk mengubahnya menjadi teks; 3. PHP menghantar teks kepada perkhidmatan AI (seperti Openaigpt) untuk mendapatkan jawapan pintar; 4. PHP kemudian memanggil TTSAPI (seperti sintesis Baidu atau Google Voice) untuk menukar balasan ke fail suara; 5. PHP mengalir fail suara kembali ke bahagian depan untuk bermain, menyelesaikan interaksi. Seluruh proses dikuasai oleh PHP untuk memastikan hubungan lancar antara semua pautan.

Cara Menggunakan PHP untuk Membina Fungsi Perkongsian Sosial PHP Perkongsian Interface Integration Practice Cara Menggunakan PHP untuk Membina Fungsi Perkongsian Sosial PHP Perkongsian Interface Integration Practice Jul 25, 2025 pm 08:51 PM

Kaedah teras untuk membina fungsi perkongsian sosial dalam PHP adalah untuk menghasilkan pautan perkongsian secara dinamik yang memenuhi keperluan setiap platform. 1. Mula -mula dapatkan halaman semasa atau URL dan maklumat artikel yang ditentukan; 2. Gunakan urlencode untuk menyandikan parameter; 3. Sambutan dan menjana pautan perkongsian mengikut protokol setiap platform; 4. Pautan paparan di hujung depan untuk pengguna mengklik dan berkongsi; 5. Dinamik menghasilkan tag OG pada halaman untuk mengoptimumkan paparan kandungan perkongsian; 6. Pastikan untuk melepaskan input pengguna untuk mencegah serangan XSS. Kaedah ini tidak memerlukan pengesahan yang kompleks, mempunyai kos penyelenggaraan yang rendah, dan sesuai untuk kebanyakan keperluan perkongsian kandungan.

Cara Menggunakan PHP Digabungkan dengan AI Untuk Mencapai Ralat Pembetulan Ralat PHP Pengesanan dan Pengoptimuman Sintaks PHP Cara Menggunakan PHP Digabungkan dengan AI Untuk Mencapai Ralat Pembetulan Ralat PHP Pengesanan dan Pengoptimuman Sintaks PHP Jul 25, 2025 pm 08:57 PM

Untuk merealisasikan pembetulan ralat teks dan pengoptimuman sintaks dengan AI, anda perlu mengikuti langkah -langkah berikut: 1. Pilih model AI atau API yang sesuai, seperti Baidu, Tencent API atau perpustakaan NLP sumber terbuka; 2. Panggil API melalui curl atau Guzzle PHP dan memproses hasil pulangan; 3. Maklumat pembetulan ralat paparan dalam aplikasi dan membenarkan pengguna memilih sama ada untuk mengadopsinya; 4. Gunakan php-l dan php_codesniffer untuk pengesanan sintaks dan pengoptimuman kod; 5. Secara berterusan mengumpul maklum balas dan mengemas kini model atau peraturan untuk meningkatkan kesannya. Apabila memilih AIAPI, fokus pada menilai ketepatan, kelajuan tindak balas, harga dan sokongan untuk PHP. Pengoptimuman kod harus mengikuti spesifikasi PSR, gunakan cache yang munasabah, elakkan pertanyaan bulat, mengkaji semula kod secara berkala, dan gunakan x

PHP menyedari pengurusan inventori komoditi dan pengewangan PHP penyegerakan inventori dan mekanisme penggera PHP menyedari pengurusan inventori komoditi dan pengewangan PHP penyegerakan inventori dan mekanisme penggera Jul 25, 2025 pm 08:30 PM

PHP memastikan pemotongan inventori atomik melalui urus niaga pangkalan data dan kunci baris forupdate untuk mengelakkan overselling serentak yang tinggi; 2. Konsistensi inventori pelbagai platform bergantung kepada pengurusan berpusat dan penyegerakan yang didorong oleh peristiwa, menggabungkan pemberitahuan API/webhook dan beratur mesej untuk memastikan penghantaran data yang boleh dipercayai; 3. Mekanisme penggera harus menetapkan inventori rendah, sifar/inventori negatif, jualan yang tidak dapat dilepaskan, kitaran penambahan dan strategi turun naik yang tidak normal dalam senario yang berbeza, dan pilih DingTalk, SMS atau orang yang bertanggungjawab e -mel mengikut urgensi, dan maklumat penggera mesti lengkap dan jelas untuk mencapai penyesuaian perniagaan dan tindak balas yang cepat.

Cara Menggunakan PHP Untuk Memanggil AI Menulis Alat Auxiliary PHP Meningkatkan Kecekapan Output Kandungan Cara Menggunakan PHP Untuk Memanggil AI Menulis Alat Auxiliary PHP Meningkatkan Kecekapan Output Kandungan Jul 25, 2025 pm 08:18 PM

Apabila memilih API penulisan AI, anda perlu memeriksa kestabilan, harga, pencocokan fungsi dan sama ada terdapat percubaan percuma; 2. PHP menggunakan Guzzle untuk menghantar permintaan pos dan menggunakan JSON_DECODE untuk memproses data JSON yang dikembalikan, perhatikan untuk menangkap pengecualian dan kod ralat; 3. Mengintegrasikan kandungan AI ke dalam projek memerlukan mekanisme audit dan menyokong penyesuaian peribadi; 4. Cache, giliran asynchronous dan teknologi terhad semasa boleh digunakan untuk mengoptimumkan prestasi untuk mengelakkan kesesakan kerana kesesuaian yang tinggi.

10 laman web pasaran cryptocurrency yang paling berwibawa di dunia (versi terbaru 2025) 10 laman web pasaran cryptocurrency yang paling berwibawa di dunia (versi terbaru 2025) Jul 29, 2025 pm 12:48 PM

Sepuluh platform pasaran cryptocurrency yang berwibawa dan analisis data pada tahun 2025 adalah: 1. CoinMarketCap, menyediakan kedudukan permodalan pasaran yang komprehensif dan data pasaran asas; 2. Coingecko, menyediakan penilaian projek pelbagai dimensi dengan skor kemerdekaan dan amanah; 3. TradingView, mempunyai carta k-line yang paling profesional dan alat analisis teknikal; 4. Binance Market, menyediakan data masa nyata yang paling langsung sebagai pertukaran terbesar; 5. Pasar Ouyi, menonjolkan penunjuk derivatif utama seperti jumlah kedudukan dan kadar modal; 6. Glassnode, memberi tumpuan kepada data rantaian seperti alamat aktif dan trend ikan paus gergasi; 7. Messari, menyediakan laporan penyelidikan peringkat institusi dan data standard yang ketat; 8. Cryptocompa

Apa itu Ethereum? Apakah cara untuk mendapatkan Ethereum Eth? Apa itu Ethereum? Apakah cara untuk mendapatkan Ethereum Eth? Jul 31, 2025 pm 11:00 PM

Ethereum adalah platform aplikasi yang terdesentralisasi berdasarkan kontrak pintar, dan ETH token asalnya boleh diperolehi dalam pelbagai cara. 1. Daftar akaun melalui platform berpusat seperti Binance dan Ouyiok, pensijilan KYC lengkap dan membeli ETH dengan stablecoins; 2. Sambungkan ke penyimpanan digital melalui platform yang terdesentralisasi, dan secara langsung bertukar ETH dengan stablecoins atau token lain; 3. Mengambil bahagian dalam ikrar rangkaian, dan anda boleh memilih Ikrar Bebas (memerlukan 32 ETH), perkhidmatan ikrar cecair atau ikrar satu klik pada platform terpusat untuk mendapatkan ganjaran; 4. Dapatkan ETH dengan menyediakan perkhidmatan kepada projek Web3, menyelesaikan tugas atau mendapatkan udara. Adalah disyorkan bahawa pemula bermula dari platform terpusat arus perdana, beransur -ansur beralih ke kaedah yang terdesentralisasi, dan selalu melampirkan kepentingan keselamatan aset dan penyelidikan bebas, ke

Penyimpanan dan Pemulihan Panggilan Twilio: Mod mesyuarat dengan pemprosesan kaki panggilan bebas Penyimpanan dan Pemulihan Panggilan Twilio: Mod mesyuarat dengan pemprosesan kaki panggilan bebas Jul 25, 2025 pm 08:42 PM

Artikel ini menghuraikan dua kaedah utama untuk merealisasikan panggilan dan tidak disengajakan di Twilio. Pilihan pilihan adalah untuk memanfaatkan ciri persidangan Twilio untuk membolehkan pengekalan dan pemulihan panggilan dengan mudah dengan mengemas kini sumber peserta persidangan, dan menyesuaikan pengekalan muzik. Pendekatan lain adalah untuk menangani kaki panggilan bebas, yang memerlukan logik twiml yang lebih kompleks, diluluskan, dan pengurusan tiba, tetapi lebih rumit daripada mod mesyuarat. Artikel ini menyediakan contoh kod khusus dan langkah -langkah operasi untuk membantu pemaju dengan cekap melaksanakan kawalan panggilan Twilio.

See all articles