Opencv for c++画像処理
15932 ワード
画像を表示
MatクラスはOpenCV表現の2次元画像の基礎である.
イメージエッチング
腐食:画像の暗い色の部分で画像のハイライト部分を「腐食」します.
getStructuringElement関数は、指定したサイズと形状の構造要素(カーネルマトリクス)の値を返します.Erode関数は画像腐食を行う.腐食は画像形態学における操作であり,リンクされたこのブログにはいくつかの関連紹介がある.
イメージブラー
blur関数は画像を平均フィルタリングし,画像をぼかしてもよい.
cannyエッジ検出
画像を読み込み、階調マップに変換し、blur関数で画像ブラーを行いノイズを低減し、canny関数でエッジ検出を行います.
画像をぼかし操作する主な役割はノイズを除去することである.ノイズも高周波信号に集中するため、擬似エッジとして容易に認識される.画像ブラーはノイズを除去し,擬似エッジの識別を低減する.しかし,画像エッジ情報も高周波信号であるため,ぼかしの半径選択が重要であり,過大な半径では弱いエッジが検出されにくい.
画像に透かしを付ける
実は画像ミックスです
#include
#include
using namespace cv;
int main(int argc, char** argv) {
//std::cout << "Hello, World!" << std::endl;
Mat img=imread("../test.jpg");
imshow("123", img);
waitKey(0);
return 0;
}
MatクラスはOpenCV表現の2次元画像の基礎である.
イメージエッチング
腐食:画像の暗い色の部分で画像のハイライト部分を「腐食」します.
#include
#include
using namespace cv;
int main(int argc, char** argv) {
//std::cout << "Hello, World!" << std::endl;
Mat img=imread("../test.jpg");
imshow("123", img);
Mat element = getStructuringElement(MORPH_RECT, Size(15, 15));
Mat dstImage;
erode(img, dstImage, element);
imshow("456", dstImage);
waitKey(0);
return 0;
}
getStructuringElement関数は、指定したサイズと形状の構造要素(カーネルマトリクス)の値を返します.Erode関数は画像腐食を行う.腐食は画像形態学における操作であり,リンクされたこのブログにはいくつかの関連紹介がある.
イメージブラー
#include
#include
using namespace cv;
int main(int argc, char** argv) {
//std::cout << "Hello, World!" << std::endl;
Mat img=imread("../test.jpg");
imshow("123", img);
Mat dstImage;
blur(img, dstImage, Size(7, 7));
imshow("456", dstImage);
waitKey(0);
return 0;
}
blur関数は画像を平均フィルタリングし,画像をぼかしてもよい.
cannyエッジ検出
画像を読み込み、階調マップに変換し、blur関数で画像ブラーを行いノイズを低減し、canny関数でエッジ検出を行います.
#include
#include
using namespace cv;
int main(int argc, char** argv) {
//std::cout << "Hello, World!" << std::endl;
Mat img=imread("../test.jpg");
imshow("123", img);
Mat edge, grayImage;
cvtColor(img, grayImage, CV_BGR2GRAY);
Mat dstImage;
blur(grayImage, dstImage, Size(7, 7));
Canny(dstImage, edge, 3, 9, 3);
imshow("456", edge);
waitKey(0);
return 0;
}
画像をぼかし操作する主な役割はノイズを除去することである.ノイズも高周波信号に集中するため、擬似エッジとして容易に認識される.画像ブラーはノイズを除去し,擬似エッジの識別を低減する.しかし,画像エッジ情報も高周波信号であるため,ぼかしの半径選択が重要であり,過大な半径では弱いエッジが検出されにくい.
画像に透かしを付ける
実は画像ミックスです
#include
#include
using namespace cv;
int main(int argc, char** argv) {
Mat image = imread("../test.jpg");
imshow("source", image);
Mat temp = imread("../shuiyin.jpg");
Mat print;
resize(temp, print, Size(50, 50));
imshow("print", print);
Mat ROI = image(cvRect(image.cols-print.cols, image.rows-print.rows, print.cols, print.rows));
addWeighted(ROI, 1, print, 0.3, 2, ROI);
imshow("sourceWithPrint", image);
waitKey(0);
return 0;
}