Maison base de données tutoriel mysql 利用OpenCL对OpenCV并行化心得(2)

利用OpenCL对OpenCV并行化心得(2)

Jun 07, 2016 pm 03:20 PM
opencv 利用 parallèle Expérience

上文说到了没有ROI的情况下怎么优化add,现在看看有roi的情况。 ROI是opencv里面的一个特性,也可以说是图像处理库都有的特性,它的意思是对于整个一幅图像,只处理被ROI框起来的那一块,可以看做是一个mask。如果不注重性能,最简单的方法就是加上一个offse

上文说到了没有ROI的情况下怎么优化add,现在看看有roi的情况。

ROI是opencv里面的一个特性,也可以说是图像处理库都有的特性,它的意思是对于整个一幅图像,只处理被ROI框起来的那一块,可以看做是一个mask。如果不注重性能,最简单的方法就是加上一个offset即可

__kernel void matrix_add(__global uchar* src1,__global uchar* src2, __global uchar* dst, int rows, int cols,int src1_step,int src2_step,int dst_step,int src1_offset, int src2_offset, int dst_offset)

{

int x=get_global_id(0);

int y=get_global_id(1);

if(x

dst[mad24(y,dst_step,x+dst_offset)]=src1[mad24(y,src1t_step,x+src1_offset)]+src2[mad24(y,src2_step,x+src2_offset)];

}

但是在每次读4个点的时候不能这么做,因为这有对齐问题。比如一个矩阵是17列1行,ROI设置的是后16个点,起始地址就不会是4的整数倍,这样在指针强制转换的时候会出现未定义的情况,结果是错的。除此之外,长度不是4的倍数也会出现问题,所以要使用一些技巧。一个办法是可以先强制对齐地址,多读一些数据,判断是否是需要的,不是需要的就扔掉

__kernel void matrix_add (__global uchar *src1, int src1_step, int src1_offset,
                             __global uchar *src2, int src2_step, int src2_offset,
                             __global uchar *dst,  int dst_step,  int dst_offset,
                             int rows, int cols, int dst_step1)
{
    int x = get_global_id(0);
    int y = get_global_id(1);

    if (x     {
        x = x
        #define dst_align (dst_offset & 3)
        int src1_index = mad24(y, src1_step, x + src1_offset - dst_align);
        int src2_index = mad24(y, src2_step, x + src2_offset - dst_align);

        int dst_start  = mad24(y, dst_step, dst_offset);
        int dst_end    = mad24(y, dst_step, dst_offset + dst_step1);
        int dst_index  = mad24(y, dst_step, dst_offset + x & (int)0xfffffffc);

        uchar4 src1_data = vload4(0, src1 + src1_index);
        uchar4 src2_data = vload4(0, src2 + src2_index);

        uchar4 dst_data = *((__global uchar4 *)(dst + dst_index));
        short4 tmp      = convert_short4_sat(src1_data) + convert_short4_sat(src2_data);
        uchar4 tmp_data = convert_uchar4_sat(tmp);

        dst_data.x = ((dst_index + 0 >= dst_start) && (dst_index + 0         dst_data.y = ((dst_index + 1 >= dst_start) && (dst_index + 1         dst_data.z = ((dst_index + 2 >= dst_start) && (dst_index + 2         dst_data.w = ((dst_index + 3 >= dst_start) && (dst_index + 3
        *((__global uchar4 *)(dst + dst_index)) = dst_data;
    }
}

由于为了处理对齐多出来很多额外的操作,所以速度并不是理论上的4倍,而是2倍多一点

Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn

Outils d'IA chauds

Undresser.AI Undress

Undresser.AI Undress

Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover

AI Clothes Remover

Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool

Undress AI Tool

Images de déshabillage gratuites

Clothoff.io

Clothoff.io

Dissolvant de vêtements AI

AI Hentai Generator

AI Hentai Generator

Générez AI Hentai gratuitement.

Article chaud

R.E.P.O. Crystals d'énergie expliqués et ce qu'ils font (cristal jaune)
2 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Meilleurs paramètres graphiques
2 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Comment réparer l'audio si vous n'entendez personne
2 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌

Outils chauds

Bloc-notes++7.3.1

Bloc-notes++7.3.1

Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise

SublimeText3 version chinoise

Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1

Envoyer Studio 13.0.1

Puissant environnement de développement intégré PHP

Dreamweaver CS6

Dreamweaver CS6

Outils de développement Web visuel

SublimeText3 version Mac

SublimeText3 version Mac

Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Installez rapidement le guide d'étude OpenCV à l'aide du gestionnaire de packages pip Installez rapidement le guide d'étude OpenCV à l'aide du gestionnaire de packages pip Jan 18, 2024 am 09:55 AM

Utilisez la commande pip pour installer facilement le didacticiel OpenCV, qui nécessite des exemples de code spécifiques. OpenCV (OpenSource Computer Vision Library) est une bibliothèque de vision par ordinateur open source. Elle contient un grand nombre d'algorithmes et de fonctions de vision par ordinateur, qui peuvent aider les développeurs à créer rapidement des images. et applications liées au traitement vidéo. Avant d'utiliser OpenCV, nous devons d'abord l'installer. Heureusement, Python fournit un outil puissant pour gérer les bibliothèques tierces.

Comment utiliser GitLab pour la gestion des documents de projet Comment utiliser GitLab pour la gestion des documents de projet Oct 20, 2023 am 10:40 AM

Comment utiliser GitLab pour la gestion des documents de projet 1. Introduction générale Dans le processus de développement logiciel, les documents de projet sont des informations très importantes. Ils peuvent non seulement aider l'équipe de développement à comprendre les besoins et la conception du projet, mais également fournir une référence à l'équipe de test. et les clients. Afin de faciliter le contrôle de version et la collaboration en équipe sur les documents de projet, nous pouvons utiliser GitLab pour la gestion des documents de projet. GitLab est un système de contrôle de version basé sur Git. En plus de prendre en charge la gestion du code, il peut également gérer les documents de projet. 2. Configuration de l'environnement GitLab Tout d'abord, je

Tutoriel d'installation d'OpenCV : un incontournable pour les utilisateurs de PyCharm Tutoriel d'installation d'OpenCV : un incontournable pour les utilisateurs de PyCharm Feb 22, 2024 pm 09:21 PM

OpenCV est une bibliothèque open source pour la vision par ordinateur et le traitement d'images, largement utilisée dans l'apprentissage automatique, la reconnaissance d'images, le traitement vidéo et d'autres domaines. Lors du développement à l'aide d'OpenCV, afin de mieux déboguer et exécuter des programmes, de nombreux développeurs choisissent d'utiliser PyCharm, un puissant environnement de développement intégré Python. Cet article fournira aux utilisateurs de PyCharm un didacticiel d'installation pour OpenCV, avec des exemples de code spécifiques. Première étape : installer Python Tout d’abord, assurez-vous que Python est installé

Comment tracer des lignes avec des flèches dans OpenCV en utilisant Java ? Comment tracer des lignes avec des flèches dans OpenCV en utilisant Java ? Aug 20, 2023 pm 02:41 PM

Le package org.opencv.imgproc de la bibliothèque JavaOpenCV contient une classe appelée Imgproc qui fournit diverses méthodes pour traiter les images d'entrée. Il fournit un ensemble de méthodes pour dessiner des formes géométriques sur des images. Pour tracer une ligne fléchée, vous devez appeler la méthode arrowedLine() de cette classe. La méthode accepte les paramètres suivants : un objet Mat représentant l'image sur laquelle la ligne doit être tracée. Un objet Point représentant deux points entre des lignes. draw. Un objet scalaire représentant la couleur de la ligne. (BGR) Un entier représentant l'épaisseur de la ligne (par défaut : 1). Exemple importorg.opencv.core.Core;importation

Comment implémenter le traitement vidéo à l'aide de PHP et de la bibliothèque OpenCV ? Comment implémenter le traitement vidéo à l'aide de PHP et de la bibliothèque OpenCV ? Jul 17, 2023 pm 09:13 PM

Comment implémenter le traitement vidéo à l'aide de PHP et de la bibliothèque OpenCV ? Résumé : Dans les applications technologiques modernes, le traitement vidéo est devenu une technologie importante. Cet article expliquera comment utiliser le langage de programmation PHP combiné à la bibliothèque OpenCV pour implémenter certaines fonctions de traitement vidéo de base et joindra des exemples de code correspondants. Mots clés : PHP, OpenCV, traitement vidéo, exemples de code Introduction : Avec le développement d'Internet et la popularité des smartphones, le contenu vidéo est devenu un élément indispensable de la vie des gens. Cependant, pour réaliser le montage vidéo et

Utiliser OpenCV en PHP pour les applications de vision par ordinateur Utiliser OpenCV en PHP pour les applications de vision par ordinateur Jun 19, 2023 pm 03:09 PM

La vision par ordinateur (Computer Vision) est l'une des branches importantes dans le domaine de l'intelligence artificielle. Elle permet aux ordinateurs de percevoir et de comprendre automatiquement des signaux visuels tels que des images et des vidéos, et de réaliser des scénarios d'application tels que l'interaction homme-machine et le contrôle automatisé. OpenCV (OpenSourceComputerVisionLibrary) est une bibliothèque de vision par ordinateur open source populaire largement utilisée dans la vision par ordinateur, l'apprentissage automatique, l'apprentissage profond et d'autres domaines. Cet article explique comment utiliser

Techniques et solutions courantes d'optimisation des performances et de refactorisation de code en C# Techniques et solutions courantes d'optimisation des performances et de refactorisation de code en C# Oct 09, 2023 pm 12:01 PM

Techniques et solutions courantes d'optimisation des performances et de refactorisation de code en C# Introduction : Dans le processus de développement logiciel, l'optimisation des performances et la refactorisation de code sont des liens importants qui ne peuvent être ignorés. Surtout lors du développement de grandes applications à l'aide de C#, l'optimisation et la refactorisation du code peuvent améliorer les performances et la maintenabilité de l'application. Cet article présentera quelques techniques courantes d’optimisation des performances et de refactorisation du code C#, et fournira les solutions correspondantes et des exemples de code spécifiques. 1. Compétences en matière d'optimisation des performances : choisissez le type de collection approprié : C# fournit une variété de types de collections, tels que List, Dict

Comment obtenir une netteté d'image à l'aide de la bibliothèque PHP et OpenCV ? Comment obtenir une netteté d'image à l'aide de la bibliothèque PHP et OpenCV ? Jul 17, 2023 am 08:31 AM

Comment obtenir une netteté d'image à l'aide de la bibliothèque PHP et OpenCV ? Présentation : La netteté de l'image est une technique de traitement d'image courante utilisée pour améliorer la clarté et la force des bords d'une image. Dans cet article, nous expliquerons comment implémenter la netteté d'image à l'aide de PHP et de la bibliothèque OpenCV. OpenCV est une puissante bibliothèque de vision par ordinateur open source qui fournit de riches fonctions de traitement d'image. Nous utiliserons l'extension PHP d'OpenCV pour implémenter l'algorithme de netteté de l'image. Étape 1 : Installer les extensions OpenCV et PHP Tout d'abord, nous avons besoin

See all articles