通過對圖像像素點處理來畫一條直線

上次給灰度圖畫了對角線,本以爲給彩色圖畫對角線也是隨隨便便就能完成的任務,然而…
當然,如果只是調用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組成的向量。

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