上次給灰度圖畫了對角線,本以爲給彩色圖畫對角線也是隨隨便便就能完成的任務,然而…
當然,如果只是調用Opencv中的line函數,也是簡簡單單的。不過熱愛學習和思考的我怎麼可能只滿足於這樣呢。在看了多個大神的博客後我決定通過Mat::at()改變像素值來達到畫線的目的。不過學藝不精,沒能成功。我只好先畫一條直線來熟悉熟悉Mat::at()。
下面是程序:
#include<opencv2\highgui\highgui.hpp>
using namespace cv;
int main()
{
Mat picture1 = imread("123.jpg",6); //載入真實無損的原圖像
imshow("[原圖]",picture1);
for (int i = 0; i < picture1.cols; i++)
{
picture1.at<Vec3b>(50, i)[0] = 0;
picture1.at<Vec3b>(50, i)[1] = 0;
picture1.at<Vec3b>(50, i)[2] = 255; //畫紅線
}
imshow("[畫直線]", picture1);
waitKey(0);
return 0;
}
運行結果:
下面簡單講講我對Mat中at函數的理解
單通道圖片:
picture1.at(i, j) = 255;//將單通道圖片第i行j列的像素改爲白色
RGB三通道圖像:
picture1.at(i, j)[0] = 255;
picture1.at(i, j)[1] = 255;
picture1.at(i, j)[2] = 255;
其中Vec3b的意思是由三個uchar組成的向量。