この号では、主に各基本機能の適用について説明します。
データ型: IplImage *
使用するソフトウェア: Visual Studio 2017
ヘッダーファイル:
#include <cv.h>
#include <cxcore.h>
#include <highgui.h>
数学演算が必要な場合:
#include <math.h>
基本機能紹介:
画像パス:
画像が次の位置にある場合、パスを使用できます。
const char *filename = "test.bmp";
それ以外の場合は、絶対パスを使用します(たとえば、デスクトップ上)。
const char *filename = "C:\\Users\\Lenovo\\Desktop\\test.bmp";
絶対パスはダブルスラッシュを使用する必要があることに注意してください
画像の読み取り:
画像を読み取り、inputimageという名前を付けます。白黒のシングルチャネル画像を読み取りたい場合は、-1を0に変更できます。
IplImage *inputimage = cvLoadImage(filename, -1);
ウィンドウの作成:
inputという名前のウィンドウを作成します。ウィンドウサイズを自由に変更する場合は、1を0に変更します。
cvNamedWindow("input", 1);
画像表示:
inputという名前のウィンドウに画像inputimageを表示します:
cvShowImage("input", inputimage);
画像表示時間:
括弧内の数字は0以下であり、ウィンドウは閉じられていません。数字が0より大きい場合、括弧内の数字はウィンドウが閉じられていない時間の長さです。
cvWaitKey(0);
窓の破壊:
cvDestroyWindow("inputimage");
大量の破壊が必要な場合は、次を使用できます。
cvDestroyAllWindows();
画像メモリの解放:
cvReleaseImage(&inputimage);
空白の画像の作成:
空白の画像ですが、デフォルトで作成されるのは灰色です。
例:inputimageと同じサイズの画像を作成します。
IplImage *newimage = cvCreateImage(cvSize(inputimage->width, inputimage->height), IPL_DEPTH_8U, inputimage->nChannels);
その中で、IPL_DEPTH_8Uは、各チャネルの値の範囲が0〜255であることを示しています。これは、私たちが使用する最も使用されている範囲です。
各属性の概要:
-> nChannels:チャンネル数、ほとんどのカラー画像は3チャンネルですが、ほとんどのソフトウェアはRGBチャンネルを使用しますが、opencvはBGRチャンネルを使用します.3つのチャンネルの値はB(青)を表します、G(緑)、R(赤)の色の濃さ
-> width-
> height:
画像はピクセル単位で表示され、widthは水平方向のピクセルの行のピクセル数を表し、heightは垂直方向の列のピクセル数を表します。
-> widthStep:
図に示すように、行に格納される実際のデータ数。実際の画像は、次のようにデータを格納します。widthStep= width * nChannels
-> imageData:
実際のデータストレージマトリックス、使用法:
例(kチャネルのi番目の行とj番目の列のピクセルの色を255に設定します)
inputimahe->imageData[i*inputimage->widthStep + j * inputimage->nChannels + k]=(unsigned char)255;
注データストレージの形式により、割り当てと値の抽出のために、データをunsignedchar形式に変換することをお勧めします。
画像の反転色の完全なコード:
フォーマットを確実にするために、コードは3つのファイルに分割されます。
reverseImage.h
#pragma once
#include<cv.h>
#include<highgui.h>
#include<cxcore.h>
IplImage *inverseImage(IplImage *inputimage);
reverseImage.cpp
#include"inverseImage.h"
IplImage *inverseImage(IplImage *inputimage) {
IplImage *inverseimage = cvCreateImage(cvSize(inputimage->width, inputimage->height), IPL_DEPTH_8U, inputimage->nChannels);
for (int i = 0; i < inputimage->height; i++) {
for (int j = 0; j < inputimage->width; j++) {
for (int k = 0; k < inputimage->nChannels; k++) {
inverseimage->imageData[i*inputimage->widthStep + j * inputimage->nChannels + k] =
255 - (unsigned char)inputimage->imageData[i*inputimage->widthStep + j * inputimage->nChannels + k];
}
}
}
return inverseimage;
}
main.cpp
#include"inverseImage.h"
int main() {
const char *filename = "test.bmp";
IplImage *inputimage = cvLoadImage(filename, -1);
IplImage *inverseimage;
inverseimage = inverseImage(inputimage);
cvNamedWindow("inverse", 1);
cvShowImage("inverse", inverseimage);
cvWaitKey(0);
cvDestroyAllWindows();
cvReleaseImage(&inputimage);
cvReleaseImage(&inverseimage);
return 0;
}