目次
1. いくつかの一般的な色空間:
2. OpenCV での色空間変換
3. シンプルな魔法の杖プログラム
ホームページ ウェブフロントエンド PS チュートリアル OpenCV成長への道(3):PhotoShopの魔法の杖ツールを真似してみる

OpenCV成長への道(3):PhotoShopの魔法の杖ツールを真似してみる

Feb 20, 2017 am 09:09 AM
photoshop

この記事のテーマは、実際には色選択プログラムを使用した画像の色空間の変換であり、OpenCV の色変換関数の使用法といくつかの注意事項について説明します。

1. いくつかの一般的な色空間:

RGB 色空間: RGB は、色を生成するためのさまざまな「光」の比率を記述するため、加法混色手法を使用します。暗闇から始まり、光が重なり合い、色を生み出します。 RGB は、赤、緑、青の光の値を表します。デジタル画像の保存には通常、RGB モードが使用されます。OpenCV の 3 つのチャネルの保存順序は BGR であることに注意してください。

HSV、HSI: これら 2 つのカラー形式は、人間の目の色の区別に基づいて定義されます。H (色相) は色相を表し、S (彩度) は彩度を表し、V (値) は明るさを表し、I (強度) は明るさを表します。 。

Lab 空間: モデル内の均一な変化は、知覚される色の均一な変化に対応するため、Lab を色空間内の点として想像できます。隣接する点が近ければ近いほど、2 つの色は近づきます。そのため、ラボ スペースは 2 つの色の類似性を測定するためによく使用されます。

色空間の詳細については、http://en.wikipedia.org/wiki/Color_space

2. OpenCV での色空間変換

OpenCV は、cvtColor 関数を使用して画像の色変換を完了します。 cvtColor は opencv2/imgproc/imgproc.hpp ヘッダー ファイルで定義されており、その C++ インターフェイスは次のとおりです:

void cvtColor(InputArray src, OutputArray dst, int code, int ) dstCn = 0 )

src: 入力画像。

dst: 出力画像。

コード: CV_BGR2Lab、CV_BGR2HSV、CV_HSV2BGR、CV_BGR2RGB などの色変換タイプ。

dstCn: 出力画像のチャンネル番号。デフォルトが 0 の場合、入力画像のチャンネル数を意味します。

BGR から Lab に画像を変換します: cvtColor(image,image,CV_BGR2Lab)

3. シンプルな魔法の杖プログラム

まず colorDetect クラスを定義します:

class colorDetect{private:    int minDist; //minium acceptable distance    Vec3b target;//target color;    
    Mat result; //the resultpublic:
    colorDetect();    void SetMinDistance(int dist);    void SetTargetColor(uchar red,uchar green,uchar blue);    void SetTargetColor(Vec3b color); //set the target color    Mat process(const Mat& image); //main process};
ログイン後にコピー

minDist は距離を制限するために定義したしきい値です。 2 つの色の間の値は、PhotoShop の魔法の杖ツールのしきい値に相当します。

target はシードカラーに相当するターゲットカラーです。 result は、ストレージ処理によって得られた結果です。

processはメインの処理プログラムです。 processの中身を見てみましょう。

Mat colorDetect::process(const Mat& image)
{    Mat ImageLab=image.clone();
    result.create(image.rows,image.cols,CV_8U);    
    //将image转换为Lab格式存储在ImageLab中    
    cvtColor(image,ImageLab,CV_BGR2Lab);    
    //将目标颜色由BGR转换为Lab    
    Mat temp(1,1,CV_8UC3);
    temp.at<Vec3b>(0,0)=target;//创建了一张1*1的临时图像并用目标颜色填充    
    cvtColor(temp,temp,CV_BGR2Lab);
    target=temp.at<Vec3b>(0,0);//再从临时图像的Lab格式中取出目标颜色

    // 创建处理用的迭代器    
    Mat_<Vec3b>::iterator it=ImageLab.begin<Vec3b>();    
    Mat_<Vec3b>::iterator itend=ImageLab.end<Vec3b>();    
    Mat_<uchar>::iterator itout=result.begin<uchar>();    
    while(it!=itend)
    {        
    //两个颜色值之间距离的计算        
    int dist=static_cast<int>(norm<int,3>(Vec3i((*it)[0]-target[0],
            (*it)[1]-target[1],(*it)[2]-target[2])));        
            if(dist<minDist)
            (*itout)=255;        
            else            
            (*itout)=0;
        it++;
        itout++;
    }    return result;
}
ログイン後にコピー


プログラムでは特に注意が必要な点が 2 つあります:

1. 画像を Lab 空間に変換した後、一時的な画像を作成することでターゲットの色も変換する必要があります。

2. ノルム関数は、2 つの色の間の距離を決定するために使用されます。その演算は、norm(v) です。ここで、v は次元ベクトルです。プログラムでは、2 つの色の値を差し引いた結果の 3 次元の適切な量になります。

次に、 Vec3i((*it)[0]-target[0],(*it)[1]-target[1],(*it)[2]-target[2] ) が置き換えられるかどうかを検討する価値があります。 by Vec3i((*it)-target)?答えは「ノー」です。なぜなら、(*it)-target は実際の操作中に減算結果の型を自動的に制限するからです。

次のようにターゲットの色としきい値を設定した後、サンプル効果を取得できます:

cdet.SetTargetColor(150,150,150);
cdet.SetMinDistance(50);

OpenCV成長への道(3):PhotoShopの魔法の杖ツールを真似してみる

その他の OpenCV 成長パス (3 ): 記事用PhotoShop の魔法の杖ツールの模倣に関連して、PHP 中国語 Web サイトに注意してください。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、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)

ソーシャルメディアグラフィックを作成するためにPhotoshopを使用するにはどうすればよいですか? ソーシャルメディアグラフィックを作成するためにPhotoshopを使用するにはどうすればよいですか? Mar 18, 2025 pm 01:41 PM

この記事では、ソーシャルメディアグラフィックスのPhotoshop、セットアップ、設計ツール、最適化技術をカバーすることを使用して詳細に説明しています。グラフィック作成の効率と品質を強調しています。

PSが荷重を見せ続ける理由は何ですか? PSが荷重を見せ続ける理由は何ですか? Apr 06, 2025 pm 06:39 PM

PSの「読み込み」の問題は、リソースアクセスまたは処理の問題によって引き起こされます。ハードディスクの読み取り速度は遅いか悪いです。CrystaldiskInfoを使用して、ハードディスクの健康を確認し、問題のあるハードディスクを置き換えます。不十分なメモリ:高解像度の画像と複雑な層処理に対するPSのニーズを満たすためのメモリをアップグレードします。グラフィックカードドライバーは時代遅れまたは破損しています:ドライバーを更新して、PSとグラフィックスカードの間の通信を最適化します。ファイルパスが長すぎるか、ファイル名に特殊文字があります。短いパスを使用して特殊文字を避けます。 PS独自の問題:PSインストーラーを再インストールまたは修理します。

Photoshop(ファイルサイズ、解像度を最適化)を使用してWeb用の画像を準備するにはどうすればよいですか? Photoshop(ファイルサイズ、解像度を最適化)を使用してWeb用の画像を準備するにはどうすればよいですか? Mar 18, 2025 pm 01:35 PM

記事では、ファイルのサイズと解像度に焦点を当てたPhotoshopを使用して、Webの画像の最適化について説明します。主な問題は、品質と負荷時間のバランスをとることです。

Photoshop(解像度、カラープロファイル)を使用して、印刷用の画像を準備するにはどうすればよいですか? Photoshop(解像度、カラープロファイル)を使用して、印刷用の画像を準備するにはどうすればよいですか? Mar 18, 2025 pm 01:36 PM

この記事は、Photoshopで印刷するための画像の準備を導き、解像度、色プロファイル、シャープネスに焦点を当てています。 300 PPIおよびCMYKプロファイルが高品質のプリントに不可欠であると主張しています。

PhotoshopでアニメーションGIFを作成するにはどうすればよいですか? PhotoshopでアニメーションGIFを作成するにはどうすればよいですか? Mar 18, 2025 pm 01:38 PM

記事では、既存のGIFにフレームを追加するなど、PhotoshopでアニメーションGIFの作成と最適化について説明します。主な焦点は、品質とファイルサイズのバランスをとることです。

Photoshopのビデオ編集機能を使用するにはどうすればよいですか? Photoshopのビデオ編集機能を使用するにはどうすればよいですか? Mar 18, 2025 pm 01:37 PM

この記事では、ビデオ編集にPhotoshopを使用する方法、ビデオのインポート、編集、エクスポートの手順の詳細、およびタイムラインパネル、ビデオレイヤー、エフェクトなどの重要な機能の強調表示について説明します。

PSでPDFをエクスポートすることに関する一般的な質問は何ですか PSでPDFをエクスポートすることに関する一般的な質問は何ですか Apr 06, 2025 pm 04:51 PM

PSをPDFとしてエクスポートする際のよくある質問とソリューション:フォント埋め込み問題:「フォント」オプションを確認し、「埋め込み」を選択するか、フォントを曲線(パス)に変換します。色偏差の問題:ファイルをCMYKモードに変換し、色を調整します。 RGBで直接エクスポートするには、プレビューと色の逸脱のための心理的な準備が必要です。解像度とファイルサイズの問題:実際の条件に応じて解像度を選択するか、圧縮オプションを使用してファイルサイズを最適化します。特殊効果の問題:エクスポートする前にレイヤーをマージ(フラットン)するか、長所と短所を比較検討します。

PSの負荷速度をスピードアップする方法は? PSの負荷速度をスピードアップする方法は? Apr 06, 2025 pm 06:27 PM

Slow Photoshopの起動の問題を解決するには、次のような多面的なアプローチが必要です。ハードウェアのアップグレード(メモリ、ソリッドステートドライブ、CPU)。時代遅れまたは互換性のないプラグインのアンインストール。システムのゴミと過剰な背景プログラムを定期的にクリーンアップします。無関係なプログラムを慎重に閉鎖する。起動中に多数のファイルを開くことを避けます。

See all articles