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

Table of Contents
How to solve the problem of transparent image where the opencv.js projection transformation result is blank
Home Web Front-end JS Tutorial How to solve the problem that the result of OpenCV.js projection transformation is a blank transparent picture?

How to solve the problem that the result of OpenCV.js projection transformation is a blank transparent picture?

Apr 04, 2025 pm 03:45 PM
ai Solution click event

How to solve the problem of transparent image where the opencv.js projection transformation result is blank

When using opencv.js for image processing, sometimes you will encounter the problem of transparent images with blank image results after projection transformation. Here are the problems I encountered and the solutions.

When I was processing images, the code was able to successfully identify the four coordinates of the document, but when it came to the projection transformation step, the result was always blank transparent picture and there was no error. Here is part of the code for the projection transformation I used:

 // Projection transformation 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]);
let transformx = cv.getperspectivetransform(srcquad, dstquad);
let target = new cv.mat();
cv.warpperspective(img, target, transmtx, new cv.size(img.cols, img.rows));
// Show the result cv.imshow(canvas, target);

To solve this problem, I made the following improvements:

  1. Set the canvas size : After the image is loaded, that is, in the imgelement.onload function, set the width and height of the canvas to be consistent with the image size.
  2. Add error handling : When the image loading fails, that is, in the imgelement.onerror function, add error handling to capture image loading errors.

Here is the complete code improved:

 

    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>OpenCV.js Example</title>


    <script async src="https://docs.opencv.org/4.5.5/opencv.js" onload="onOpenCvReady();"></script>
    <canvas id="canvasOutput"></canvas>
    <script>
        function onOpenCvReady() {
            console.log("OpenCV.js loading is completed.");
            processImage();
        }

        function sleep(ms) {
            return new Promise(resolve => setTimeout(resolve, ms));
        }

        async function processImage() {
            await sleep(3000); // Wait for 3 seconds let imageUrl = "../archives/111.jpg";
            let imgElement = new Image();
            imgElement.src = imageUrl;
            var img;

            // Load the image imgElement.onload = function() {
                try {
                    img = cv.imread(imgElement);
                    if (img.empty()) {
                        console.error("Image could not be read.");
                        return;
                    }

                    // Get the canvas element and set the size let canvas = document.getElementById(&#39;canvasOutput&#39;);
                    canvas.width = img.cols;
                    canvas.height = img.rows;

                    // Reset image size let dsize = new cv.Size(img.cols, img.rows);
                    let dst = new cv.Mat();
                    cv.resize(img, dst, dsize, 0, 0, cv.INTER_AREA);

                    // Convert to grayscale image console.log("Before conversion:", img);
                    let gray = new cv.Mat(); // Create a new Mat object to store the grayscale image cv.cvtColor(dst, gray, cv.COLOR_BGR2GRAY); // Use appropriate conversion console.log("After conversion:", gray);

                    // Gaussian filter cv.GaussianBlur(gray, gray, new cv.Size(11, 11), 0, 0);
                    cv.imshow(canvas, gray);
                    cv.Canny(gray, gray, 20, 50, 3);

                    let contours = new cv.MatVector();
                    let hierarchy = new cv.Mat();
                    cv.findContours(gray, contours, hierarchy, cv.RETR_CCOMP, cv.CHAIN_APPROX_NONE);

                    let index = 0, maxArea = 0;
                    const area = img.cols * img.rows;
                    for (let i = 0; i < contours.size(); i) {
                        let tempArea = Math.abs(cv.contourArea(contours.get(i)));
                        if (tempArea > maxArea && tempArea > 0.3 * area) {
                            index = i;
                            maxArea = tempArea;
                        }
                    }

                    if (maxArea === 0) return;
                    const foundContour = contours.get(index);
                    const arcL = cv.arcLength(foundContour, true);
                    let approx = new cv.Mat();

                    // Approximate polygon cv.approxPolyDP(foundContour, approx, 0.01 * arcL, true);

                    if (approx.total() === 4) {
                        let points = [];
                        const data32S = approx.data32S;
                        for (let i = 0, len = data32S.length / 2; i < len; i ) {
                            points[i] = {x: data32S[i * 2], y: data32S[i * 2 1]};
                        }
                        console.log("Quadrilateral point detected:", points);

                        // Projection transform 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]);
                        let transformtx = cv.getPerspectiveTransform(srcQuad, dstQuad);
                        let target = new cv.Mat();
                        cv.warpPerspective(img, target, transmtx, new cv.Size(img.cols, img.rows));

                        // Show the result cv.imshow(canvas, target);

                        // Create a temporary canvas element let tempCanvas = document.createElement(&#39;canvas&#39;);
                        tempCanvas.width = target.cols;
                        tempCanvas.height = target.rows;
                        let tempCtx = tempCanvas.getContext(&#39;2d&#39;);

                        // Convert cv.Mat to ImageData
                        let imageData = new ImageData(new Uint8ClampedArray(target.data), target.cols, target.rows);

                        // Draw ImageData on temporary canvas tempCtx.putImageData(imageData, 0, 0);

                        // Generate canvas to Blob object tempCanvas.toBlob((blob) => {
                            // Create a URL object let url = URL.createObjectURL(blob);
                            // Create an element a and set its attribute let a = document.createElement(&#39;a&#39;);
                            a.href = url;
                            a.download = &#39;processed_image.png&#39;; // Set the name of the download file // Add the a element to the body document.body.appendChild(a);
                            // Trigger the click event to start downloading a.click();
                            // Remove the a element document.body.removeChild(a);
                            // Release URL object URL.revokeObjectURL(url);
                        }, &#39;image/png&#39;);

                        // Free memory target.delete(); // Free target here, otherwise memory leaks}

                    // Free memory img.delete();
                    dst.delete();
                    gray.delete(); // Release grayscale image Mat
                    contours.delete();
                    hierarchy.delete();
                    approx.delete();
                    foundContour.delete();
                } catch (err) {
                    console.error("Image processing error:", err);
                }
            }

            imgElement.onerror = function() {
                console.error("Image could not be loaded.");
            };
        }
    </script>

Through the above improvements, I successfully solved the problem that the result of the projection transformation is a blank transparent picture. Hope these improvements will be helpful to everyone.

The above is the detailed content of How to solve the problem that the result of OpenCV.js projection transformation is a blank transparent picture?. For more information, please follow other related articles on the PHP Chinese website!

Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn

Hot AI Tools

Undress AI Tool

Undress AI Tool

Undress images for free

Undresser.AI Undress

Undresser.AI Undress

AI-powered app for creating realistic nude photos

AI Clothes Remover

AI Clothes Remover

Online AI tool for removing clothes from photos.

Clothoff.io

Clothoff.io

AI clothes remover

Video Face Swap

Video Face Swap

Swap faces in any video effortlessly with our completely free AI face swap tool!

Hot Article

Hot Tools

Notepad++7.3.1

Notepad++7.3.1

Easy-to-use and free code editor

SublimeText3 Chinese version

SublimeText3 Chinese version

Chinese version, very easy to use

Zend Studio 13.0.1

Zend Studio 13.0.1

Powerful PHP integrated development environment

Dreamweaver CS6

Dreamweaver CS6

Visual web development tools

SublimeText3 Mac version

SublimeText3 Mac version

God-level code editing software (SublimeText3)

The popularity of the currency circle has returned, why do smart people have begun to quietly increase their positions? Look at the trend from the on-chain data and grasp the next round of wealth password! The popularity of the currency circle has returned, why do smart people have begun to quietly increase their positions? Look at the trend from the on-chain data and grasp the next round of wealth password! Jul 09, 2025 pm 08:30 PM

As the market conditions pick up, more and more smart investors have begun to quietly increase their positions in the currency circle. Many people are wondering what makes them take decisively when most people wait and see? This article will analyze current trends through on-chain data to help readers understand the logic of smart funds, so as to better grasp the next round of potential wealth growth opportunities.

What are the mainstream public chains of cryptocurrencies? The top ten rankings of cryptocurrency mainstream public chains in 2025 What are the mainstream public chains of cryptocurrencies? The top ten rankings of cryptocurrency mainstream public chains in 2025 Jul 10, 2025 pm 08:21 PM

The pattern in the public chain field shows a trend of "one super, many strong ones, and a hundred flowers blooming". Ethereum is still leading with its ecological moat, while Solana, Avalanche and others are challenging performance. Meanwhile, Polkadot, Cosmos, which focuses on interoperability, and Chainlink, which is a critical infrastructure, form a future picture of multiple chains coexisting. For users and developers, choosing which platform is no longer a single choice, but requires a trade-off between performance, cost, security and ecological maturity based on specific needs.

Bitcoin breaks new highs, Dogecoin rebounds strongly, will Ethereum keep up with the pace Bitcoin breaks new highs, Dogecoin rebounds strongly, will Ethereum keep up with the pace Jul 09, 2025 pm 08:24 PM

Recently, Bitcoin hit a new high, Dogecoin ushered in a strong rebound and the market was hot. Next, we will analyze the market drivers and technical aspects to determine whether Ethereum still has opportunities to follow the rise.

Cardano's smart contract evolution: The impact of Alonzo upgrades on 2025 Cardano's smart contract evolution: The impact of Alonzo upgrades on 2025 Jul 10, 2025 pm 07:36 PM

Cardano's Alonzo hard fork upgrade has successfully transformed Cardano from a value transfer network to a fully functional smart contract platform by introducing the Plutus smart contract platform. 1. Plutus is based on Haskell language, with powerful functionality, enhanced security and predictable cost model; 2. After the upgrade, dApps deployment is accelerated, the developer community is expanded, and the DeFi and NFT ecosystems are developing rapidly; 3. Looking ahead to 2025, the Cardano ecosystem will be more mature and diverse. Combined with the improvement of scalability in the Basho era, the enhancement of cross-chain interoperability, the evolution of decentralized governance in the Voltaire era, and the promotion of mainstream adoption by enterprise-level applications, Cardano has

Who issues stablecoins? What are the stablecoins? Who issues stablecoins? What are the stablecoins? Jul 09, 2025 pm 06:24 PM

Stablecoins are crypto assets that maintain price stability by anchoring fiat currencies such as the US dollar. They are mainly divided into three categories: fiat currency collateral, crypto asset collateral and algorithmic stablecoins. 1. USDT is issued by Tether and is the stablecoin with the largest market value and the highest liquidity. 2. USDC is released by the Centre alliance launched by Circle and Coinbase, and is known for its transparency and compliance. 3. DAI is generated by MakerDAO through over-collateralization of crypto assets and is the core currency in the DeFi field. 4. BUSD was launched in partnership with Paxos, and is regulated by the United States but has been discontinued. 5. TUSD achieves high transparency reserve verification through third-party escrow accounts. Users can use centralized exchanges such as Binance, Ouyi, and Huobi

What are the mainstream cryptocurrencies in the world? In-depth analysis of cryptocurrency in 2025 (including website) What are the mainstream cryptocurrencies in the world? In-depth analysis of cryptocurrency in 2025 (including website) Jul 10, 2025 pm 08:36 PM

At a time when the digital economy wave swept the world, cryptocurrencies have become the focus of attention from all walks of life with their unique decentralization and transparency. From the initial geek niche experiment to the current financial landscape with a market value of trillions, the evolution of cryptocurrencies is amazing. It not only brings innovations in underlying technologies, but also gives birth to countless innovative applications, which are profoundly affecting all aspects of finance, technology and even social governance.

Leading the top 20 token rankings in the 2025 crypto market (Latest update) Leading the top 20 token rankings in the 2025 crypto market (Latest update) Jul 10, 2025 pm 08:48 PM

The top 20 most promising crypto assets in 2025 include BTC, ETH, SOL, etc., mainly covering multiple tracks such as public chains, Layer 2, AI, DeFi and gaming. 1.BTC continues to lead the market with its digital yellow metallicity and popularization of ETFs; 2.ETH consolidates the ecosystem due to its position and upgrade of smart contract platforms; 3.SOL stands out with high-performance public chains and developer communities; 4.LINK is the leader in oracle connecting real data; 5.RNDR builds decentralized GPU network service AI needs; 6.IMX focuses on Web3 games to provide a zero-gas-free environment; 7.ARB leads with mature Layer 2 technology and huge DeFi ecosystem; 8.MATIC has become the value layer of Ethereum through multi-chain evolution

Which chain does Dogecoin DOGE belong to? Does Dogecoin belong to the Binance Chain? Which chain does Dogecoin DOGE belong to? Does Dogecoin belong to the Binance Chain? Jul 10, 2025 pm 08:39 PM

Recently, the discussion in the digital asset field has remained hot. Dogecoin DOGE, as one of the most popular focus, has become a question that many people have explored. Where does it "settling down"? What is the relationship with the current leading trading platform, Binance? To answer these questions, we need to conduct in-depth analysis from the two dimensions of the underlying technical logic of digital assets and the platform ecology, rather than just staying in appearance.

See all articles