目次
画像の前処理とは何ですか?なぜ重要ですか?
Python ライブラリを使用した画像の読み込みと変換
调整大小和裁剪图像至标准尺寸
对像素值进行归一化以保持一致的亮度
应用滤镜以减少噪声并锐化图像
高斯模糊:
中值模糊:
拉普拉斯滤波器:
反向掩蔽:
バイラテラル フィルター:
セグメンテーションを使用した背景の検出と削除
結合テクニック:
アプリケーションに適切な前処理ステップを選択する
サイズ変更:
カラー変換:
ノイズ低減:
正規化:
コントラスト強調:
エッジ検出:
画像前処理テクノロジに関する FAQ
Python はどのような画像形式をサポートしていますか?
画像のサイズを変更する必要があるのはどのような場合ですか?
一般的なノイズ低減技術とは何ですか?
OpenCV支持哪些颜色空间,如何在它们之间进行转换?
结论
ホームページ テクノロジー周辺機器 AI Python 画像前処理の完全ガイド

Python 画像前処理の完全ガイド

Jan 12, 2024 pm 08:06 PM
python

機械学習またはコンピューター ビジョン プロジェクトで画像の品質が低いという問題に遭遇したことがありますか?画像は多くの AI システムの生命線ですが、すべての画像が同じように作成されるわけではありません。モデルをトレーニングしたりアルゴリズムを実行したりする前に、通常、最適な結果を得るために画像の前処理が必要になります。 Python での画像前処理があなたの新しい友達になります。

Python 画像前処理の完全ガイド

このガイドでは、Python を使用して分析用に画像を準備するためのすべてのヒントとコツを学びます。サイズ変更やトリミングからノイズリダクションや正規化まで、すべてをカバーします。この時点で、画像は詳細な分析の準備が整います。 OpenCV、Pillow、scikit-image などのライブラリを利用すると、すぐに画像を強化できるようになります。それでは、準備を整えて、Python での画像前処理テクニックに関するこの完全なガイドに飛び込んでください。

画像の前処理とは何ですか?なぜ重要ですか?

画像の前処理は、生の画像データを使用可能な意味のある形式に処理するプロセスです。不要な歪みを排除し、コンピューター ビジョン アプリケーションに必要な特定の特性を強化するように設計されています。前処理は、画像データを機械学習モデルに入力する前に準備するための重要な最初のステップです。

画像の前処理では、いくつかの手法が使用されます。

  • サイズ変更: 画像のサイズを均一なサイズに変更することは、機械学習アルゴリズムが適切に機能するために非常に重要です。 OpenCVのresize()メソッドを使用して画像のサイズを変更できます。
  • グレースケール: カラー画像をグレースケールに変換すると、画像データが簡素化され、特定のアルゴリズムの計算要件が軽減されます。 cvtColor() メソッドを使用して、RGB をグレースケールに変換できます。
  • ノイズ低減: スムージング、ぼかし、フィルター技術を適用して、画像から不要なノイズを除去できます。この目的には、GaussianBlur() メソッドと medianBlur() メソッドが一般的に使用されます。
  • 正規化: 正規化では、ピクセルの強度値を目的の範囲 (通常は 0 ~ 1) に調整します。この目的には、scikit-image の Normalize() を使用できます。
  • 二値化: 閾値処理を通じてグレースケール画像を白黒画像に変換します。 OpenCV では、threshold() メソッドを使用して画像を 2 値化します。
  • コントラスト強調: ヒストグラム等化を使用して画像のコントラストを調整できます。 equalizeHist() メソッドを使用すると、画像のコントラストを高めることができます。

これらの手法を適切に組み合わせることで、画像データを大幅に改善し、より優れたコンピューター ビジョン アプリケーションを構築できます。画像の前処理は、生の画像を問題解決に適した形式に変換することで、画質と使いやすさを向上させます。

Python ライブラリを使用した画像の読み込みと変換

画像処理に Python の使用を開始するには、画像を読み込み、ライブラリが使用できる形式に変換するための 2 つの一般的なオプションがあります。ハンドル: OpenCV と Pillow。

OpenCV を使用して画像をロードする: OpenCV は、PNG、JPG、TIFF、および BMP 形式の画像をロードできます。次のコードを使用してイメージをロードできます:

import cv2image = cv2.imread('path/to/image.jpg')
ログイン後にコピー

これにより、イメージが NumPy 配列としてロードされます。画像は BGR 色空間にあるため、RGB に変換することができます。

Pillow を使用して画像をロードする: Pillow は、PIL (Python Image Library) のフレンドリーなフォークです。 PSD、ICO、WEBP など、OpenCV よりも多くの形式をサポートしています。次のコードを使用して画像をロードできます:

from PIL import Imageimage = Image.open('path/to/image.jpg')
ログイン後にコピー

画像は RGB カラー スペースになります。

カラー スペース間の変換: RGB、BGR、HSV、グレースケールなどのカラー スペース間の変換が必要になる場合があります。これは、OpenCV または Pillow を使用して実行できます。たとえば、OpenCV で BGR をグレースケールに変換するには、次を使用できます:

gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
ログイン後にコピー

または、Pillow で RGB を HSV に変換するには、次を使用できます:

image = image.convert('HSV')
ログイン後にコピー

これらの基本的なスキルがあれば、次のことができます。サイズ変更、フィルタリング、エッジ検出などのより高度なテクニックに進みます。可能性は無限大!どのような画像処理プロジェクトを構築しますか?

调整大小和裁剪图像至标准尺寸

调整大小和裁剪图像是图像预处理的重要第一步。图像大小各异,但机器学习算法通常需要标准大小。您需要将图像调整大小和裁剪为方形尺寸,通常是224x224或256x256像素。在Python中,您可以使用OpenCV或Pillow库进行调整大小和裁剪。使用OpenCV,可以使用resize()函数。例如:

import cv2img = cv2.imread('original.jpg')resized = cv2.resize(img, (224, 224))
ログイン後にコピー

这将将图像调整为224x224像素。要将图像裁剪为正方形,可以计算中心正方形裁剪大小并使用OpenCV的crop()与中心坐标。例如:

height, width, _ = img.shapesize = min(height, width)x = (width size) // 2y = (height size) // 2cropped = img[y:y+size, x:x+size]
ログイン後にコピー

使用Pillow,您可以使用Image.open()和resize()函数。例如:

from PIL import Imageimg = Image.open('original.jpg')resized = img.resize((224, 224))
ログイン後にコピー

裁剪图像时,使用img.crop()。例如:

width, height = img.sizesize = min(width, height)left = (width size) / 2top = (height size) / 2right = (width + size) / 2bottom = (height + size) / 2cropped = img.crop((left, top, right, bottom))
ログイン後にコピー

调整大小和裁剪图像至标准尺寸是一个至关重要的第一步。这将使您的机器学习模型能够有效地处理图像,并提高结果的准确性。花时间仔细调整大小和裁剪图像,您的模型将感激不尽!

对像素值进行归一化以保持一致的亮度

在处理图像数据时,将像素值归一化以保持一致的亮度并提高对比度是很重要的。这使图像更适合进行分析,并使机器学习模型能够独立于光照条件学习模式。

像素值重新缩放:最常见的归一化技术是将像素值重新缩放到0到1的范围内。这是通过将所有像素除以最大像素值(RGB图像通常为255)来实现的。例如:

import cv2img = cv2.imread('image.jpg')normalized = img / 255.0
ログイン後にコピー

这将使所有像素在0到1之间缩放,其中0为黑色,1为白色。

直方图均衡化:另一种有用的技术是直方图均衡化。这将像素强度均匀分布到整个范围以提高对比度。可以使用OpenCV的equalizeHist()方法应用它:

eq_img = cv2.equalizeHist(img)
ログイン後にコピー

这对于像素值集中在一个狭窄范围内的低对比度图像效果很好。对于一些算法,将像素值归一化为零均值和单位方差是有用的。这可以通过减去均值并缩放到单位方差来实现:

mean, std = cv2.meanStdDev(img)std_img = (img mean) / std
ログイン後にコピー

这将使图像以零为中心,标准差为1。还有一些其他更复杂的归一化技术,但这三种方法——重新缩放为0-1范围、直方图均衡化和标准化——涵盖了基础知识,将为大多数机器学习应用准备好图像数据。确保对训练和测试数据都应用相同的归一化以获得最佳结果。

应用滤镜以减少噪声并锐化图像

一旦您在Python中加载了图像,就是时候开始增强它们了。图像滤镜用于减少噪声、增强细节,总体提高图像在分析之前的质量。以下是您需要了解的一些主要滤镜:

高斯模糊:

高斯模糊滤镜用于减少图像中的细节和噪声。它通过对每个像素及其周围像素应用高斯函数来“模糊”图像。这有助于在进行边缘检测或其他处理技术之前平滑边缘和细节。

中值模糊:

中值模糊滤镜用于从图像中去除椒盐噪声。它通过用其邻近像素的中值替换每个像素来工作。这有助于平滑孤立的嘈杂像素同时保留边缘。

拉普拉斯滤波器:

拉普拉斯滤波器用于检测图像中的边缘。它通过检测强度变化较快的区域来工作。输出将是突出显示边缘的图像,可用于边缘检测。这有助于识别和提取图像中的特征。

反向掩蔽:

反向掩蔽是一种用于增强图像中细节和边缘的技术。它通过从原始图像中减去模糊版本来实现。这会放大边缘和细节,使图像看起来更清晰。反向掩蔽可用于在特征提取或对象检测之前增强细节。

バイラテラル フィルター:

バイラテラル フィルターは、エッジを維持しながら画像を滑らかにします。これは、ピクセルの空間的近接性と色の類似性を考慮して行われます。空間的に近く、色が似ているピクセルは一緒に平滑化されますが、色の異なるピクセルは平滑化されません。これにより、エッジが鮮明なままの滑らかな画像が得られます。バイラテラル フィルターは、エッジ検出前のノイズ低減に役立ちます。

これらのフィルターを適用すると、高品質に強化された画像が得られ、詳細な分析やコンピューター ビジョン タスクにすぐに使用できます。試してみて、画像処理結果がどのように改善されるかを確認してください。

セグメンテーションを使用した背景の検出と削除

画像の背景の検出と削除は、多くのコンピューター ビジョン タスクにおける重要な前処理ステップです。セグメンテーションにより、前景の被写体が背景から分離され、被写体のみを含む鮮明な画像が得られます。 OpenCV と scikit-image を使用して Python でイメージ セグメンテーションを実行する一般的な方法は次のとおりです。

Thresholding:

Thresholding は、グレースケール イメージをバイナリ イメージ (白黒) に変換します。しきい値を選択することによって。しきい値より暗いピクセルは黒になり、しきい値より明るいピクセルは白になります。これは、コントラストが高く、照明が均一な画像に適しています。 OpenCV の Threshold() メソッドを使用して、しきい値処理を適用できます。

エッジ検出:

エッジ検出は、画像内のオブジェクトのエッジを検出します。エッジを接続することで、前景の被写体を分離できます。 Canny エッジ検出器は、scikit-image の canny() メソッドに実装されている一般的なアルゴリズムです。 low_threshold パラメータと high_threshold パラメータを調整してエッジを検出します。

領域拡張:

領域拡張は、一連のシード ポイントから開始され、外側に拡張して画像内の連続領域を検出します。シード ポイントを指定すると、アルゴリズムが隣接するピクセルをチェックして、領域に追加するかどうかを決定します。これは、ピクセルを追加できなくなるまで続きます。 skimage.segmentation.region_growing() メソッドはこの手法を実装します。

分水界:

分水界アルゴリズムは画像を地形図として扱い、高輝度のピクセルが領域間の境界を表す山と谷を表します。頂上から水が流れ落ち、異なる地域が交わるときに隔離障壁が形成されます。 skimage.segmentation.watershed() メソッドは流域セグメンテーションを実行します。

これらのテクニックを試すことで、画像内の被写体を分離できます。セグメンテーションは、コンピューター ビジョン モデルを画像の最も重要な部分、つまり前景の被写体に集中させるための重要な最初のステップです。

データ拡張を使用してデータセットを拡張する

データ拡張は、既存の画像から新しい画像を生成することによって、データセットのサイズを人為的に拡張する手法です。これにより、過剰適合が軽減され、モデルの汎化パフォーマンスが向上します。画像データの一般的な拡張手法には次のものがあります。 反転と回転: 画像を反転 (水平または垂直) または回転 (90、180、270 度) するだけで、新しいデータ ポイントを生成できます。たとえば、猫の画像が 1,000 枚あり、それらを水平方向に反転し、垂直方向に反転し、90 度回転すると、合計 4,000 枚の画像が得られます (元の 1,000 枚、水平方向に反転した 1,000 枚、垂直方向に反転した 1,000 枚、90 度回転した 1,000 枚)。

トリミング:

画像をさまざまなサイズと比率にトリミングして、同じ元の画像から新しい画像を作成します。これにより、モデルは同じコンテンツのさまざまな構成や組み合わせを確認できるようになります。さまざまなサイズのランダムなクロップを作成したり、正方形などのより具体的なクロップ比率をターゲットにしたりできます。

色の操作:

明るさ、コントラスト、色相、彩度を調整することで、新しく強化された画像を作成する簡単な方法です。たとえば、画像の明るさとコントラストを最大 30% ランダムに調整して、新しいデータ ポイントを生成できます。画像を変形しすぎないように注意してください。変形するとモデルが混乱する可能性があります。

画像オーバーレイ:

透明な画像、テクスチャ、またはノイズを既存の画像にオーバーレイすることも、簡単な拡張手法の 1 つです。透かし、ロゴ、汚れ/傷、ガウス ノイズなどを追加すると、元のデータのリアルなバリエーションを作成できます。微妙なオーバーレイから始めて、モデルがどのように反応するかを確認してください。

結合テクニック:

データを最大限に増加させるために、同じ画像に対して複数の強調テクニックを組み合わせることができます。たとえば、画像の反転、回転、トリミング、色の調整を行って、1 つの元の画像から多くの新しいデータ ポイントを生成できます。ただし、強調しすぎると画像が認識できなくなる可能性があるので注意してください。

データ拡張を使用すると、新しい画像を収集せずに、画像データセットのサイズを 4 倍、10 倍、またはそれ以上に簡単に増やすことができます。これにより、トレーニング時間とコストを一定に保ちながら、オーバーフィッティングを防止し、モデルの精度を向上させることができます。

アプリケーションに適切な前処理ステップを選択する

画像分析プロジェクトに適切な前処理手法を選択することは、データと目標によって異なります。一般的な手順は次のとおりです。

サイズ変更:

画像のサイズを一定のサイズに変更することは、機械学習アルゴリズムが適切に機能するために重要です。通常、すべての画像の高さと幅を同じにし、通常は 28x28 ピクセルや 64x64 ピクセルなどの小さいサイズにする必要があります。 OpenCV または Pillow ライブラリのsize() メソッドを使用すると、これをプログラムで簡単に行うことができます。

カラー変換:

画像をグレースケールまたは白黒に変換すると、分析が簡素化され、ノイズが軽減されます。 OpenCV の cvtColor() メソッドは、画像を RGB からグレースケールに変換します。白黒画像の場合は、しきい値処理を使用します。

ノイズ低減:

ガウスぼかし、メディアンぼかし、バイラテラル フィルタリングなどの技術を使用すると、ノイズを低減し、画像を滑らかにすることができます。 OpenCV の GaussianBlur()、medianBlur()、および biliteralFilter() メソッドは、これらのフィルターを適用します。

正規化:

ピクセル値を 0 ~ 1 または -1 ~ 1 の標準範囲に正規化すると、アルゴリズムの動作が向上します。 scikit-image の Normalize() メソッドを使用して画像を正規化できます。

コントラスト強調:

低コントラストの画像の場合、ヒストグラム等化によりコントラストを向上させることができます。 OpenCVのequalizeHist()メソッドがこのタスクを実行します。

エッジ検出:

画像内のエッジや輪郭を見つけることは、多くのコンピューター ビジョン タスクに役立ちます。 OpenCV の Canny() メソッドの Canny エッジ検出器は、一般的な選択肢です。

重要なのは、特定のニーズに合ったテクノロジーを選択することです。サイズ変更などの基本的な手順から始めて、品質を向上させるさまざまな方法を試し、どの方法が結果を最適化するかを確認してください。いくつか実験してみると、理想的な前処理ワークフローが見つかります。

画像前処理テクノロジに関する FAQ

Python のさまざまな画像前処理テクノロジについてはよく理解できましたが、まだ答えのない疑問がいくつかあるかもしれません。画像の前処理に関して最もよくある質問とその回答は次のとおりです:

Python はどのような画像形式をサポートしていますか?

Python は、OpenCV や Pillow などのライブラリを通じてさまざまな画像形式をサポートしています。 主な形式には次のようなものがあります。

• JPEG — 一般的な非可逆画像形式

• PNG — 透明性のある画像に適した可逆画像形式

• TIFF — 高色深度の画像に適したロスレス画像形式

• BMP — 非圧縮ラスター画像形式

画像のサイズを変更する必要があるのはどのような場合ですか?

画像のサイズを変更する必要がある状況には次のようなものがあります。

• 画像が大きすぎて効率的に処理できない場合。サイズを小さくすると処理速度が向上します。

• 画像は機械学習モデルの入力サイズと一致する必要があります。

• 画像は画面または Web ページ上に特定のサイズで表示する必要があります。

一般的なノイズ低減技術とは何ですか?

一般的なノイズ低減手法には次のようなものがあります。

• ガウスぼかし — ガウス フィルターを使用して画像をぼかし、高周波ノイズを低減します。

• 中值模糊 — 用邻近像素的中值替换每个像素。对于去除椒盐噪声非常有效。

• 双边滤波器 — 在平滑图像的同时保留边缘。它可以去除噪声同时保持清晰的边缘。

OpenCV支持哪些颜色空间,如何在它们之间进行转换?

OpenCV支持RGB、HSV、LAB和灰度颜色空间。您可以使用cvtColor函数在这些颜色空间之间进行转换。例如:

将RGB转换为灰度:

gray = cv2.cvtColor(img, cv2.COLOR_RGB2GRAY)
ログイン後にコピー

将RGB转换为HSV:

hsv = cv2.cvtColor(img, cv2.COLOR_RGB2HSV)
ログイン後にコピー

将RGB转换为LAB:

lab = cv2.cvtColor(img, cv2.COLOR_RGB2LAB)
ログイン後にコピー

将图像转换为不同的颜色空间对于某些计算机视觉任务(如阈值处理、边缘检测和目标跟踪)非常有用。

结论

这就是您所需要的,一个在Python中准备图像进行分析的完整指南。借助OpenCV和其他库的强大功能,您现在拥有调整大小、增强、过滤和转换图像的所有工具。随意尝试不同的技术,调整参数,找到最适合您特定数据集和计算机视觉任务的方法。图像预处理可能不是构建AI系统中最引人注目的部分,但它绝对是至关重要的。

以上がPython 画像前処理の完全ガイドの詳細内容です。詳細については、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)

C言語合計の機能は何ですか? C言語合計の機能は何ですか? Apr 03, 2025 pm 02:21 PM

C言語に組み込みの合計機能はないため、自分で書く必要があります。合計は、配列を通過して要素を蓄積することで達成できます。ループバージョン:合計は、ループとアレイの長さを使用して計算されます。ポインターバージョン:ポインターを使用してアレイ要素を指し示し、効率的な合計が自己概要ポインターを通じて達成されます。アレイバージョンを動的に割り当てます:[アレイ]を動的に割り当ててメモリを自分で管理し、メモリの漏れを防ぐために割り当てられたメモリが解放されます。

独特の目標は関連していますか? 独特の目標は関連していますか? Apr 03, 2025 pm 10:30 PM

明確で明確なものは区別に関連していますが、それらは異なる方法で使用されます。明確な(形容詞)は、物事自体の独自性を説明し、物事の違いを強調するために使用されます。明確な(動詞)は、区別の動作または能力を表し、差別プロセスを説明するために使用されます。プログラミングでは、個別は、重複排除操作などのコレクション内の要素の独自性を表すためによく使用されます。明確なは、奇数や偶数の偶数を区別するなど、アルゴリズムまたは関数の設計に反映されます。最適化する場合、異なる操作は適切なアルゴリズムとデータ構造を選択する必要がありますが、異なる操作は、論理効率の区別を最適化し、明確で読み取り可能なコードの書き込みに注意を払う必要があります。

誰がより多くのPythonまたはJavaScriptを支払われますか? 誰がより多くのPythonまたはJavaScriptを支払われますか? Apr 04, 2025 am 12:09 AM

スキルや業界のニーズに応じて、PythonおよびJavaScript開発者には絶対的な給与はありません。 1. Pythonは、データサイエンスと機械学習でさらに支払われる場合があります。 2。JavaScriptは、フロントエンドとフルスタックの開発に大きな需要があり、その給与もかなりです。 3。影響要因には、経験、地理的位置、会社の規模、特定のスキルが含まれます。

Cで理解する方法!x? Cで理解する方法!x? Apr 03, 2025 pm 02:33 PM

!X理解!Xは、C言語の論理的な非操作者です。 Xの値をブーリングします。つまり、虚偽の真の変化、trueへの誤った変更です。ただし、Cの真実と虚偽はブール型ではなく数値で表されていることに注意してください。非ゼロは真であると見なされ、0のみが偽と見なされます。したがって、!xは正の数と同じ負の数を扱い、真実と見なされます。

H5ページの生産には継続的なメンテナンスが必要ですか? H5ページの生産には継続的なメンテナンスが必要ですか? Apr 05, 2025 pm 11:27 PM

H5ページは、コードの脆弱性、ブラウザー互換性、パフォーマンスの最適化、セキュリティの更新、ユーザーエクスペリエンスの改善などの要因のため、継続的に維持する必要があります。効果的なメンテナンス方法には、完全なテストシステムの確立、バージョン制御ツールの使用、定期的にページのパフォーマンスの監視、ユーザーフィードバックの収集、メンテナンス計画の策定が含まれます。

c言語でsumとはどういう意味ですか? c言語でsumとはどういう意味ですか? Apr 03, 2025 pm 02:36 PM

Cには組み込みの合計関数はありませんが、次のように実装できます。ループを使用して要素を1つずつ蓄積します。ポインターを使用して、要素に1つずつアクセスして蓄積します。大量のデータ量については、並列計算を検討してください。

ラブコードのコピーをコピーして貼り付けて無料でラブコードを貼り付けます ラブコードのコピーをコピーして貼り付けて無料でラブコードを貼り付けます Apr 04, 2025 am 06:48 AM

コードのコピーと貼り付けは不可能ではありませんが、注意して扱う必要があります。コード内の環境、ライブラリ、バージョンなどの依存関係は、現在のプロジェクトと一致しないため、エラーや予測不可能な結果が得られます。ファイルパス、従属ライブラリ、Pythonバージョンなど、コンテキストが一貫していることを確認してください。さらに、特定のライブラリのコードをコピーして貼り付けるときは、ライブラリとその依存関係をインストールする必要がある場合があります。一般的なエラーには、パスエラー、バージョンの競合、一貫性のないコードスタイルが含まれます。パフォーマンスの最適化は、コードの元の目的と制約に従って再設計またはリファクタリングする必要があります。コピーされたコードを理解してデバッグすることが重要であり、盲目的にコピーして貼り付けないでください。

C言語の合計の意味は何ですか? C言語の合計の意味は何ですか? Apr 03, 2025 pm 02:09 PM

c言語で配列要素を合計する方法:ループを使用して、配列要素を1つずつ蓄積します。多次元アレイの場合、ネストされたループを使用してトラバースして蓄積します。アレイインデックスを注意深く確認して、プログラムのクラッシュを引き起こす外れのアクセスを避けてください。

See all articles