- #include<iostream>
- #include<opencv2/opencv.hpp>
- using namespace std;
- using namespace cv;
- int main(){
- Mat image(600,800,CV_8UC1);
- Mat image2(600,800,CV_8UC3);
- for (int i = 0; i < image.rows; ++i)
- {
- /*uchar * p = image.ptr<uchar>(i);*/
- for (int j = 0; j < image.cols;++j){
- /*p[j] = (i + j) % 255;*/
- image.at<uchar>(i,j) = 0;
- }
- }
- for (int i = 0; i < image2.rows; ++i){
- for (int j = 0; j < image2.cols; ++j){
- image2.at<Vec3b>(i, j)[0] = 255;
- image2.at<Vec3b>(i, j)[1] = 255;
- image2.at<Vec3b>(i, j)[2] = 255;
- }
- }
- imshow("image",image);
- imshow("image2", image2);
- waitKey(0);
- }
-
- 先奉上代码,at的用法:
image.at<uchar>(i,j):取出灰度图像中i行j列的点。
image.at<Vec3b>(i,j)[k]:取出彩色图像中i行j列第k通道的颜色点。其中uchar,Vec3b都是图像像素值的类型,不要对Vec3b这种类型感觉害怕,其实在core里它是通过typedef Vec<T,N>来定义的,N代表元素的个数,T代表类型。
更简单一些的方法:OpenCV定义了一个Mat的模板子类为Mat_,它重载了operator()让我们可以更方便的取图像上的点。
Mat_<uchar> im=image;
im(i,j)=im(i,j)/div*div+div/2;
opencv入门笔记at的用法
最新推荐文章于 2023-04-23 18:30:15 发布