検索
ホームページウェブフロントエンドPS チュートリアルOpenCV成長への道(3):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 までご連絡ください。
デザイナー向けのPhotoshop:視覚的な概念の作成デザイナー向けのPhotoshop:視覚的な概念の作成Apr 13, 2025 am 12:09 AM

Photoshopで視覚概念の作成は、次の手順を通じて実現できます。1。新しいドキュメントを作成します。2。背景レイヤーを追加します。3。ブラシツールを使用して基本的な形状を描画します。4。テキストとグラフィックを追加します。

Photoshopは無料ですか?サブスクリプションプランの理解Photoshopは無料ですか?サブスクリプションプランの理解Apr 12, 2025 am 12:11 AM

Photoshopは無料ではありませんが、低コストまたは無料で使用する方法がいくつかあります。1。無料の試用期間は7日で、この期間中にすべての機能を体験できます。 2。学生と教師の割引はコストを半分に削減でき、学校の証明が必要です。 3. CreativeCloudパッケージは、プロのユーザーに適しており、さまざまなAdobeツールが含まれています。 4。フォトショーペルメントとLightroomは低コストの代替品であり、機能は少なくなりますが、価格は低くなっています。

Photoshopの価値:その機能に対するコストを計量しますPhotoshopの価値:その機能に対するコストを計量しますApr 11, 2025 am 12:02 AM

Photoshopは、強力な機能と幅広いアプリケーションシナリオを提供するため、投資する価値があります。 1)コア関数には、画像編集、レイヤー管理、特殊効果の生産、色の調整が含まれます。 2)プロのデザイナーや写真家に適していますが、アマチュアはGIMPなどの代替案を考慮する場合があります。 3)AdobeCreativeCloudを購読することは、必要に応じて、1回限りの支出を避けるために使用できます。

Photoshopの中核目的:クリエイティブな画像デザインPhotoshopの中核目的:クリエイティブな画像デザインApr 10, 2025 am 09:29 AM

Photoshopのクリエイティブな画像デザインでのコアの使用は、その強力な機能と柔軟性です。 1)設計者は、レイヤー、マスク、フィルターを介して創造性を視覚的現実に変換することができます。 2)基本的な使用には、トリミング、サイズ変更、色補正が含まれます。 3)レイヤースタイル、ブレンドモード、スマートオブジェクトなどの高度な使用法は、複雑な効果を生み出すことができます。 4)一般的な間違いには、不適切な層管理とフィルターの過度の使用が含まれます。これは、レイヤーを整理し、フィルターを合理的に使用することで解決できます。 5)パフォーマンスの最適化とベストプラクティスには、レイヤーの合理的な使用、ファイルの定期的な保存、ショートカットキーの使用が含まれます。

WebデザインのPhotoshop:UI/UXの高度なテクニックWebデザインのPhotoshop:UI/UXの高度なテクニックApr 08, 2025 am 12:19 AM

Photoshopは、Webデザインで使用して、高忠実度のプロトタイプを作成し、UI要素を設計し、ユーザーインタラクションをシミュレートできます。 1.基本設計のためにレイヤー、マスク、スマートオブジェクトを使用します。 2。アニメーションおよびタイムライン関数を介してユーザーの相互作用をシミュレートします。 3.スクリプトを使用して、設計プロセスを自動化し、効率を向上させます。

初心者の記事:PSブラシを使用してフォントに亀裂効果を追加します(共有)初心者の記事:PSブラシを使用してフォントに亀裂効果を追加します(共有)Apr 07, 2025 am 06:21 AM

前の記事「PS(お気に入り)を使用してプレート画像に印刷効果を追加するためのステップバイステップを教える」では、PSを使用してPSを使用してプレート画像に印刷効果を追加するための小さなトリックを紹介しました。次の記事では、PSブラシを使用してフォントに亀裂効果を追加する方法を紹介します。それを行う方法を見てみましょう。

Photoshop Advanced Typography:見事なテキスト効果の作成Photoshop Advanced Typography:見事なテキスト効果の作成Apr 07, 2025 am 12:15 AM

Photoshopでは、レイヤースタイルとフィルターを介してテキストエフェクトを作成できます。 1.新しいドキュメントを作成し、テキストを追加します。 2.影や外側の輝きなどのレイヤースタイルを適用します。 3.波効果などのフィルターを使用し、ベベルとリリーフ効果を追加します。 4.マスクを使用して、効果範囲と強度を調整して、テキスト効果の視覚的影響を最適化します。

写真をカットする方法写真をカットする方法Apr 06, 2025 pm 10:27 PM

切断は、画像の背景部分を削除し、被写体を置き去りにするプロセスです。一般的なカットアウト方法は次のとおりです。マニュアルカットアウト:画像編集ソフトウェアを使用して、サブジェクトのエッジを手動で概説します。自動カットアウト:ソフトウェアを使用して、サブジェクトを自動的に識別し、背景から分離します。サードパーティの切り抜きツールを使用します。特別なツールを使用して画像を切り取ります。チャネルカットアウト:画像のチャネルを使用して、操作のために主題の色と明らかな違いを持つチャネルをセグメント化し、選択します。

See all articles

ホット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ヘンタイを無料で生成します。

ホットツール

MantisBT

MantisBT

Mantis は、製品の欠陥追跡を支援するために設計された、導入が簡単な Web ベースの欠陥追跡ツールです。 PHP、MySQL、Web サーバーが必要です。デモおよびホスティング サービスをチェックしてください。

MinGW - Minimalist GNU for Windows

MinGW - Minimalist GNU for Windows

このプロジェクトは osdn.net/projects/mingw に移行中です。引き続きそこでフォローしていただけます。 MinGW: GNU Compiler Collection (GCC) のネイティブ Windows ポートであり、ネイティブ Windows アプリケーションを構築するための自由に配布可能なインポート ライブラリとヘッダー ファイルであり、C99 機能をサポートする MSVC ランタイムの拡張機能が含まれています。すべての MinGW ソフトウェアは 64 ビット Windows プラットフォームで実行できます。

ZendStudio 13.5.1 Mac

ZendStudio 13.5.1 Mac

強力な PHP 統合開発環境

EditPlus 中国語クラック版

EditPlus 中国語クラック版

サイズが小さく、構文の強調表示、コード プロンプト機能はサポートされていません

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境