Opencv学习笔记2--像素的访问

    xiaoxiao2021-04-17  43

    #include "opencv2\opencv.hpp" #include iostream ![成员函数at用来读取像素,image.at<Vec3b>(i,j)[channel] = value; at方法不会进行类型转换,所以需要制定图像元素类型,并且要和矩阵内类型一致![这里写图片描述](https://img-blog.csdn.net/20170414140455673?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvcXEzODUxMDU1MDE=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast) ](https://img-blog.csdn.net/20170414140307218?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvcXEzODUxMDU1MDE=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast) using namespace cv; using namespace std; void main() { (1)动态地址访问 Mat img = imread("1.jpg"); imshow("src", img); Mat dst = img.clone(); int rowNumber = img.rows; int colNumber = img.cols; for (int i = 0; i < rowNumber; i++) { for (int j = 0; j < colNumber;j++) { dst.at<Vec3b>(i, j)[0] = 255;//蓝色通道 dst.at<Vec3b>(i, j)[1] = 0;//绿色通道 dst.at<Vec3b>(i, j)[2] = 0;//红色通道 } } imshow("dst", dst); waitKey(0); (2)指针访问 /*Mat img = imread("1.jpg"); imshow("src", img); Mat dst = img.clone(); int rowNumber = img.rows; int colNumber = img.cols*img.channels();//获取每一行的元素 for (int i = 0; i < rowNumber; i++) { uchar *data = dst.ptr<uchar>(i);//获取每一行的首地址 for (int j = 0; j < colNumber; j++) { switch (j%3) { case 0: //蓝色通道 data[j] = data[j]/64*64+64/2; break; case 1: //绿 data[j] = data[j]/64*64+32; break; case 2: //红 data[j] = data[j]/64*64+32; break; } } } imshow("dst", dst); waitKey(0); (3)迭代器访问 Mat img = imread("1.jpg"); Mat dst = img.clone(); imshow("src", img); Mat_<Vec3b>::iterator it = dst.begin<Vec3b>(); //初始位置 Mat_<Vec3b>::iterator itend = dst.end<Vec3b>(); //终止位置 for (; it != itend; it++) { (*it)[0] = 0; //蓝色通道 (*it)[1] = 255; //绿色通道 (*it)[2] = 0; //红色通道 } imshow("dst", dst); waitKey(0); destroyAllWindows(); } 速度:指针>迭代器>动态地址

    转载请注明原文地址: https://ju.6miu.com/read-674124.html

    最新回复(0)