OpenCV學習筆記------雪花特效

對行列及矩陣的瞭解

#include<opencv2/core/core.hpp>
#include<opencv2/highgui/highgui.hpp>
#include<iostream>

using namespace std;
using namespace cv;

int main(int argc, char** argv)
{
	argv[1] = "F:\\Openfile\\Open_file\\open1\\01.jpg";
	Mat image = imread(argv[1], CV_LOAD_IMAGE_COLOR);

	if (!image.data)
	{
		cout << "圖片讀取失敗!" << endl;
		return -1;
	}
	namedWindow("原圖", CV_WINDOW_NORMAL);
	namedWindow("下雪圖", CV_WINDOW_NORMAL);

	//雪點數
	int i = 600;

	for (int k = 0; k < i; k++)
	{
		int i = rand() % image.cols;
		int j = rand() % image.rows;
		
		if (image.channels() == 1)
		{
			image.at<uchar>(j, i) = 255;
			if (i < (int)image.cols)
				image.at<uchar>(j + 1, i) = 255;
			if (j < (int)image.rows)
				image.at<uchar>(j, i + 1) = 255;
			if (i < (int)image.cols&&j < (int)image.rows)
				image.at<uchar>(j + 1, i + 1) = 255;
		}
		else if (image.channels() == 3)
		{
			image.at<cv::Vec3b>(j, i)[0] = 255;
			image.at<cv::Vec3b>(j, i)[1] = 255;
			image.at<cv::Vec3b>(j, i)[2] = 255;
			if (i < (int)image.cols - 1)
			{
				image.at<cv::Vec3b>(j, i + 1)[0] = 255;
				image.at<cv::Vec3b>(j, i + 1)[1] = 255;
				image.at<cv::Vec3b>(j, i + 1)[2] = 255;
			}
			if (j < (int)image.rows - 1)
			{
				image.at<cv::Vec3b>(j + 1, i)[0] = 255;
				image.at<cv::Vec3b>(j + 1, i)[1] = 255;
				image.at<cv::Vec3b>(j + 1, i)[2] = 255;
			}
			if (j < (int)image.rows - 1 && i < (int)image.cols - 1)
			{
				image.at<cv::Vec3b>(j + 1, i + 1)[0] = 255;
				image.at<cv::Vec3b>(j + 1, i + 1)[1] = 255;
				image.at<cv::Vec3b>(j + 1, i + 1)[2] = 255;
			}
		}
	}
	//在窗口內顯示圖文件
	imshow("下雪圖",image);

	//窗口等待顯示按鍵
	waitKey(0);

	return 0;

}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章