ホームページ データベース mysql チュートリアル 利用OpenCL对OpenCV并行化心得(2)

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

Jun 07, 2016 pm 03:20 PM
opencv 利用 平行 経験

上文说到了没有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倍多一点

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

pip パッケージ マネージャーを使用して OpenCV スタディ ガイドをすばやくインストールする pip パッケージ マネージャーを使用して OpenCV スタディ ガイドをすばやくインストールする Jan 18, 2024 am 09:55 AM

pip コマンドを使用すると、特定のコード サンプルが必要な OpenCV チュートリアルを簡単にインストールできます。OpenCV (OpenSource Computer Vision Library) は、オープン ソースのコンピュータ ビジョン ライブラリです。これには、開発者がイメージを迅速に構築するのに役立つ多数のコンピュータ ビジョン アルゴリズムと関数が含まれていますおよびビデオ処理関連のアプリケーション。 OpenCV を使用する前に、まず OpenCV をインストールする必要があります。幸いなことに、Python にはサードパーティのライブラリを管理するための強力なツール pip が用意されています。

OpenCV インストール チュートリアル: PyCharm ユーザー必読 OpenCV インストール チュートリアル: PyCharm ユーザー必読 Feb 22, 2024 pm 09:21 PM

OpenCV は、コンピューター ビジョンおよび画像処理用のオープン ソース ライブラリであり、機械学習、画像認識、ビデオ処理などの分野で広く使用されています。 OpenCV を使用して開発する場合、プログラムのデバッグと実行を改善するために、多くの開発者は強力な Python 統合開発環境である PyCharm の使用を選択します。この記事では、PyCharm ユーザーに OpenCV のインストール チュートリアルと具体的なコード例を提供します。ステップ 1: Python をインストールする まず、Python がインストールされていることを確認します。

プロジェクトドキュメント管理に GitLab を使用する方法 プロジェクトドキュメント管理に GitLab を使用する方法 Oct 20, 2023 am 10:40 AM

プロジェクトドキュメント管理に GitLab を使用する方法 1. 背景の紹介 ソフトウェア開発プロセスにおいて、プロジェクトドキュメントは非常に重要な情報であり、開発チームがプロジェクトのニーズと設計を理解するのに役立つだけでなく、テストチームの参考にもなります。そして顧客。プロジェクト ドキュメントのバージョン管理とチーム コラボレーションを容易にするために、プロジェクト ドキュメント管理に GitLab を使用できます。 GitLab は Git をベースとしたバージョン管理システムであり、コード管理をサポートするだけでなく、プロジェクト ドキュメントの管理も行うことができます。 2. GitLabの環境設定 まず、

Javaを使用してOpenCVで矢印付きの線を描くにはどうすればよいですか? Javaを使用してOpenCVで矢印付きの線を描くにはどうすればよいですか? Aug 20, 2023 pm 02:41 PM

JavaOpenCV ライブラリの org.opencv.imgproc パッケージには、入力画像を処理するためのさまざまなメソッドを提供する Imgproc というクラスが含まれています。画像上に幾何学的形状を描画するための一連のメソッドを提供します。矢印付きの線を描画するには、このクラスの arrowedLine() メソッドを呼び出す必要があります。このメソッドは次のパラメータを受け入れます: 線が描画されるイメージを表す Mat オブジェクト。線間の 2 点を表す Point オブジェクト。線の色を表す Scalar オブジェクト。 (BGR) 線の太さを表す整数 (デフォルト: 1)。例 importorg.opencv.core.Core;importo

PHPとOpenCVライブラリを使用してビデオ処理を実装するにはどうすればよいですか? PHPとOpenCVライブラリを使用してビデオ処理を実装するにはどうすればよいですか? Jul 17, 2023 pm 09:13 PM

PHPとOpenCVライブラリを使用してビデオ処理を実装するにはどうすればよいですか?要約: ビデオ処理は、現代の科学技術応用において重要な技術となっています。この記事では、PHP プログラミング言語を OpenCV ライブラリと組み合わせて使用​​して、いくつかの基本的なビデオ処理機能を実装する方法を紹介し、対応するコード例を添付します。キーワード: PHP、OpenCV、ビデオ処理、コード例 はじめに: インターネットの発達とスマートフォンの普及により、ビデオコンテンツは人々の生活に欠かせないものになりました。ただし、ビデオ編集を実現するには、

C# での一般的なパフォーマンス チューニングとコード リファクタリングの手法とソリューション C# での一般的なパフォーマンス チューニングとコード リファクタリングの手法とソリューション Oct 09, 2023 pm 12:01 PM

C# における一般的なパフォーマンス チューニングとコード リファクタリングの手法とソリューション はじめに: ソフトウェア開発プロセスでは、パフォーマンスの最適化とコード リファクタリングは無視できない重要なリンクです。特に C# を使用して大規模なアプリケーションを開発する場合、コードの最適化とリファクタリングにより、アプリケーションのパフォーマンスと保守性が向上します。この記事では、一般的な C# パフォーマンス チューニングとコード リファクタリングの手法をいくつか紹介し、対応するソリューションと具体的なコード例を示します。 1. パフォーマンス チューニング スキル: 適切なコレクション タイプを選択します。C# には、List、Dict などのさまざまなコレクション タイプが用意されています。

初心者は読んでください: PyCharm に OpenCV をインストールする方法に関する詳細なチュートリアル 初心者は読んでください: PyCharm に OpenCV をインストールする方法に関する詳細なチュートリアル Feb 26, 2024 pm 03:24 PM

PyCharm は、JetBrains によって開発された強力な Python 統合開発環境 (IDE) であり、Python 開発者がコードを作成し、プログラムをデバッグし、プロジェクトを管理するのに役立つ豊富な機能とツールを提供します。 PyCharm で強力なコンピューター ビジョン ライブラリである OpenCV を使用すると、画像処理、ビデオ処理、その他のタスクを簡単に実行できます。この記事では、PyCharm に OpenCV をインストールして構成する手順を詳しく説明し、具体的なコード例を示します。 1.あん

コンピューター ビジョン アプリケーション向けの PHP での OpenCV の使用 コンピューター ビジョン アプリケーション向けの PHP での OpenCV の使用 Jun 19, 2023 pm 03:09 PM

コンピューター ビジョン (コンピューター ビジョン) は、人工知能分野の重要な分野の 1 つであり、コンピューターが画像やビデオなどの視覚信号を自動的に認識して理解し、人間とコンピューターの対話や自動制御などのアプリケーション シナリオを実現できるようにします。 OpenCV (OpenSourceComputerVisionLibrary) は、コンピューター ビジョン、機械学習、ディープ ラーニング、その他の分野で広く使用されている、人気のあるオープン ソース コンピューター ビジョン ライブラリです。この記事では使い方を紹介します

See all articles