という、C++の課題なのですが、C++を全く授業でやったことがないのに画像処理の講義を取ったため、このプログラムが何をしているか全くわかりません。どなたか解説をお願いしたいです、よろしくお願いします。
#include "common.h"
cv::Mat unsharp(const cv::Mat_<uchar> image, double k)
{
cv::Mat_<uchar> dst= cv::Mat::zeros(image.rows, image.cols, CV_8U);
for (int i = 1; i < image.cols - 1; ++i)
{
for (int j = 1; j < image.rows - 1; ++j)
{
double tmp = (1 + 8 * k)*image(j, i) -
k * (image(j - 1, i - 1) + image(j - 1, i) + image(j - 1, i + 1) +
image(j, i - 1) + image(j, i + 1) +
image(j + 1, i - 1) + image(j + 1, i) + image(j + 1, i + 1));
//■ここで教科書115ページの図5.32の処理をする
if (tmp < 0) tmp = 0;
if (tmp > 255) tmp = 255;
dst(j, i) = (uchar)tmp;
}
}
return dst;
}
int main(int argc, char* argv[])
{
cv::Mat_<uchar> image, out;
if (argc > 1)
{
image = cv::imread(argv[1]);
}
else {
//image = cv::imread("C:¥¥opencv¥¥sources¥¥samples¥¥data¥¥baboon.jpg",0);
image = cv::imread("flower.jpg", 0);
}
cv::imshow("input", image);
cv::waitKey();
double k = 3; //画像やkを変えて効果を確認しよう
out=unsharp(image, k);
cv::imshow("unshark masking", out);
cv::waitKey();
return 0;
}