ディレクトリ
読み取りと書き込みの画像
関数imread負荷は、RGB画像またはグレースケールとして指定することができ
画像ファイルの種類の保存IMWRITEは拡張子によって決定されます
読み取りと書き込みピクセル
ピクセルのグレーの画素値を読み出します
(CV_8UC1)スカラー強度= img.at <UCHAR>(Y、X)。
或者スカラー強度= img.at <UCHAR>(点(x、y))。
RGB画素の画素値を読み出します
Vec3f強度= img.at <Vec3f>(Y、X)。
青= intensity.valフロート[0]。
緑= intensity.valフロート[1]。
フロートは、赤色= intensity.val [2]。
画素値を変更
グレースケール画像
img.at <UCHAR>(Y、X)= 128。
RGB 3チャネル画像
img.at <Vec3b>(Y、X)[0] = 128。// 青い
img.at <Vec3b>(Y、X)[1] = 128。// 緑
img.at <Vec3b>(Y、X)[2] = 128。// 赤
ブランク画像割り当て
IMG =スカラー(0)。
ROIの選択
RECT R(10、10、100、100)。
マットsmallImg = IMG(R)
Vec3bとVec3F
三つのチャネルに対応するVec3b配列は、データの青色、緑色、赤色UCHARタイプです。
3チャンネルのfloat型に対応Vec3f
以下のことを実現するためにCV_8UC1 CV32F1の変換:src.convertTo(DST、CV_32F)。
#include <opencv2/opencv.hpp>
#include <iostream>
using namespace std;
using namespace cv;
int main(int argc, char** argv) {
Mat src;
src = imread("D:/vcprojects/images/test.png");
if (src.empty()) {
cout << "could not load image..." << endl;
return -1;
}
namedWindow("input", CV_WINDOW_AUTOSIZE);
imshow("input", src);
/*Mat dst;
dst = Mat(src.size(), src.type());
dst = Scalar(127, 0, 255);
namedWindow("output", CV_WINDOW_AUTOSIZE);
imshow("output", dst);*/
Mat dst;
//src.copyTo(dst);
namedWindow("output", CV_WINDOW_AUTOSIZE);
cvtColor(src, dst, CV_BGR2GRAY);
printf("input image channels : %d\n", src.channels());
printf("output image channels : %d\n", dst.channels());
int cols = dst.cols;
int rows = dst.rows;
printf("rows : %d cols : %d\n", rows, cols);
const uchar* firstRow = dst.ptr<uchar>(0);
printf("fist pixel value : %d\n", *firstRow);
Mat M(100, 100, CV_8UC1, Scalar(127));
//cout << "M =" << endl << M << endl;
Mat m1;
m1.create(src.size(), src.type());
m1 = Scalar(0, 0, 255);
Mat csrc;
Mat kernel = (Mat_<char>(3, 3) << 0, -1, 0, -1, 5, -1, 0, -1, 0);
filter2D(src, csrc, -1, kernel);
Mat m2 = Mat::eye(2, 2, CV_8UC1);
cout << "m2 =" << endl << m2 << endl;
imshow("output", m2);
waitKey(0);
return 0;
}