[w 5 d 2]OpenCV画像処理
(Ubuntu 18.04.6 LTS)
2022.03.15
C++、VSコードを使用
プログラマ自主走行コース
基本構造は暗記が必要です!
Mat cv::imread(const String& filename,int flags= IMREAD_COLOR )
flagに基づいて、どのような形式でロードするかを決定できます. IMREAD UNCHANGED:透明. IMREAD GRAYSCALE:階調画像を読み込みます. IMREAD COLOR:カラー画像を読み込みます.約束を破る. cv::Matimg:Mattype変数imgを作成します.
「./resources/lenna.bmp」:現在のフォルダのリソースフォルダのlenna.bmpを読み込みます.
cv::IMREAD COLOR:True Color Image.
img.空():プライマリタイプ変数imgが空の場合はtrueです.
imgが空の場合は「Image load failed」を出力し、値-1を返して終了します.
「image」という名前のウィンドウにimgオブジェクトを出力します.
ASCIIコードで、ESCが欲しいなら27.
Point-Point(x,y)を使用します.
Size Size(width,height)形式で使用します.
Rect-Rect(x、y、width、height).
String(String)-文字列.OpenCV 4.xバージョンのstd::stringクラスと同じです.
Verc-同じ複数のデータ・ソースからなるデータ型.
Scalar:4つの双形を持つ資料型.(4要素ベクトル)
Channel:単一要素の数.階調は輝度です.true colorは3つのrgbデータ を提供する
Depth:マトリックス要素で使用されるデータ型情報. 8U: 8 bit, unsigned char 8S: 8 bit, sigend char 32F: 32 bit, float Type:Depth+Channel、典型的な例は以下の通りです. CV_8UC1: 8bit unsigned char, channel 1 == Gray scale image CV_8UC3: 8bit unsigned char, channel 3 == True color image Matオブジェクトの初期化
img 4は真のカラー画像を生成し、OpenCVはBGR順にデータを格納するので、赤色255を用い、残りは0とする.
img 3,img 4は深放射に類似している.コピーして別のターゲットを作成します.
単一のピクセルには、(y,x)としてアクセスできます.
上のコードは輝度が1つ増えるごとにコードです.* p=Matオブジェクト.ptr(y)はpがy rowであることを示し,値はp[x]として入力できる.0から開始
行為単位に近い面に有利である.
2022.03.15
C++、VSコードを使用
プログラマ自主走行コース
ビデオファイルの読み込みと出力(フルコード)
基本構造は暗記が必要です!
#include <iostream>
#include "opencv2/opencv.hpp"
int main()
{
cv::Mat img = cv::imread("./resources/lenna.bmp",cv::IMREAD_COLOR);
if (img.empty()){
std::cerr << "Image load failed!" << std::endl;
return -1;
}
cv::namedWindow("image");
cv::imshow("image",img);
cv::waitKey();
cv::destroyAllWindows();
return 0;
}
cv::,std::部分を省略したい場合は、次のコードをmain関数の前に置くことができます.using namespace std;
using namespace cv;
コード解析
#include <iostream>
#include "opencv2/opencv.hpp"
ヘッダファイルを含めます.OpenCV 2/Opencv.hppを含める必要があります.int main()
{
cv::Mat img = cv::imread("./resources/lenna.bmp",cv::IMREAD_COLOR);
cv::Matはマトリックスタイプクラスです.cv::imreadはファイルを読み込む関数です.Mat cv::imread(const String& filename,int flags= IMREAD_COLOR )
flagに基づいて、どのような形式でロードするかを決定できます.
「./resources/lenna.bmp」:現在のフォルダのリソースフォルダのlenna.bmpを読み込みます.
cv::IMREAD COLOR:True Color Image.
if (img.empty()){
std::cerr << "Image load failed!" << std::endl;
return -1;
}
エラー検出コード.img.空():プライマリタイプ変数imgが空の場合はtrueです.
imgが空の場合は「Image load failed」を出力し、値-1を返して終了します.
cv::namedWindow("image");
空のウィンドウを作成します.ウィンドウ名は「イメージ」 cv::imshow("image",img);
void cv::imshow ( const String & winname, InputArray mat )「image」という名前のウィンドウにimgオブジェクトを出力します.
cv::waitKey();
キーボード入力待ち.上にのみimshowが表示されている場合は、ウィンドウが表示されず、waitKeyで表示できます.数字が含まれている場合は、その期間内にKey入力を待ち、省略または0の場合は待ち続けます.ASCIIコードで、ESCが欲しいなら27.
cv::destroyAllWindows();
すべてのウィンドウを閉じます.主なカテゴリ
Point-Point(x,y)を使用します.
Size Size(width,height)形式で使用します.
Rect-Rect(x、y、width、height).
String(String)-文字列.OpenCV 4.xバージョンのstd::stringクラスと同じです.
Verc-同じ複数のデータ・ソースからなるデータ型.
Scalar:4つの双形を持つ資料型.(4要素ベクトル)
Mat-マトリクス
Channel:単一要素の数.
Depth:マトリックス要素で使用されるデータ型情報.
cv::Mat img1(height,width,CV_8UC1);
cv::Mat img2(Size(width,height),CV_8UC3);
Matオブジェクトを簡単に作成します.cv::Mat img3(height,width,CV_8UC1,255);
cv::Mat img4(height,width,CV_8UC3,Scalar(0,0,255));
img 3は階調画像を生成し、要素は255(白)img 4は真のカラー画像を生成し、OpenCVはBGR順にデータを格納するので、赤色255を用い、残りは0とする.
cv::Mat img5 = Mat::zeros(3,3,CV_32SC1);
cv::Mat img6 = Mat::ones(3,3,CV_32FC1);
img 5は0であり、img 6は1である.cv::Mat img1 = cv::imread("lenna.bmp");
cv::Mat img2 = img1
cv::Mat img3 = img1.clone();
cv::Mat img4;
img1.copyTo(img4);
img 2は浅い放射に似ている.img 1とimg 2は同じオブジェクトを指し、1つを変更すると他のオブジェクトも変更されます.img 3,img 4は深放射に類似している.コピーして別のターゲットを作成します.
ピクセルアクセス
//at 사용
cv::Mat img1 = cv::imread("lenna.bmp",cv::IMREAD_GRAYSCALE);
for (int y=0;y<img1.rows;y++){
for (int x=0;x<img1.cols;x++{
img1.at<uchar>(y,x)++;
}
}
Matオブジェクト.at上のコードは輝度が1つ増えるごとにコードです.
//ptr 사용
cv::Mat img1= cv::imread("lenna.bmp",cv::IMREAD_GRAYSCALE);
for (int y=0;y<img1.rows;y++){
uchar* p = img1.ptr<uchar>(y);
for (int x=0;x<img1.cols;x++{
p[x]++;
}
}
行為単位に近い面に有利である.
Reference
この問題について([w 5 d 2]OpenCV画像処理), 我々は、より多くの情報をここで見つけました https://velog.io/@anecjong/w5d2-OpenCV-영상-처리テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol