OpenCV 学习笔记 基础知识
1 矩阵类型 Mat 和 IplImage 相互转换。
1.1 Mat 转 IplImage
Mat img1 = imread("test.jpg",0);
IplImage *img;
img = &IplImage(img1);
1.2 IplImage 转 Mat
IplImage *iplImg = cvLoadImage("test.jpg", 1);
Mat img(iplImg );
2 序列图片读取
{
string first_file = "test.jpg";//
//序列读取
VideoCapture sequence(first_file);
if (!sequence.isOpened())
{
cerr << "Failed to open the image sequence!\n" << endl;
return 1;
}
Mat img1;
int i = 1;
for (;;)
{
sequence >> img1;
if (img1.empty())
{
cout << "End of Sequence" << endl;
break;
}
//序列写入
char s[25];
sprintf(s,"IMG-0002-000%02d.jpg" , i);
cv::imwrite(s, res);
i++;
}
}
{
string first_file = "test.jpg";//
//序列读取
VideoCapture sequence(first_file);
if (!sequence.isOpened())
{
cerr << "Failed to open the image sequence!\n" << endl;
return 1;
}
Mat img1;
int i = 1;
for (;;)
{
sequence >> img1;
if (img1.empty())
{
cout << "End of Sequence" << endl;
break;
}
//序列写入
char s[25];
sprintf(s,"IMG-0002-000%02d.jpg" , i);
cv::imwrite(s, res);
i++;
}
}
3 操作图片像素
3.1 IPlImage 图片类型
Mat img1 = cv::imread("test.jpg",0);
IplImage *img;
img = &IplImage(img1);
for (int i = 0; i < img->height; ++i) {
for (int j = 0; j < img->width; ++j) {
CvScalar scalar = cvGet2D(img, i, j);//获取像素值
//scalar.val[0]、scalar.val[1]、scalar.val[2]分别代表该点的BGR值,可进行操作
//cout << scalar.val[0] <<scalar.val[1]<<scalar.val[2];
//cvSet2D(img, i, j, s);//set the (i,j) pixel value
//cvSet2D(img, i, j, scalar);
if ((scalar.val[0] == 0) && (scalar.val[1] ==0) && (scalar.val[2] == 0))
{
scalar.val[0] = 255;
scalar.val[1] = 255;
scalar.val[2] = 255;
//cvSet2D(img, i, j, s);//set the (i,j) pixel value
cvSet2D(img, i, j, scalar);//修改像素值
}
else
{
scalar.val[0] = 0;
scalar.val[1] = 0;
scalar.val[2] = 0;
//cvSet2D(img, i, j, s);//set the (i,j) pixel value
cvSet2D(img, i, j, scalar);
}
}
}
Mat img1 = cv::imread("test.jpg",0);
IplImage *img;
img = &IplImage(img1);
for (int i = 0; i < img->height; ++i) {
for (int j = 0; j < img->width; ++j) {
CvScalar scalar = cvGet2D(img, i, j);//获取像素值
//scalar.val[0]、scalar.val[1]、scalar.val[2]分别代表该点的BGR值,可进行操作
//cout << scalar.val[0] <<scalar.val[1]<<scalar.val[2];
//cvSet2D(img, i, j, s);//set the (i,j) pixel value
//cvSet2D(img, i, j, scalar);
if ((scalar.val[0] == 0) && (scalar.val[1] ==0) && (scalar.val[2] == 0))
{
scalar.val[0] = 255;
scalar.val[1] = 255;
scalar.val[2] = 255;
//cvSet2D(img, i, j, s);//set the (i,j) pixel value
cvSet2D(img, i, j, scalar);//修改像素值
}
else
{
scalar.val[0] = 0;
scalar.val[1] = 0;
scalar.val[2] = 0;
//cvSet2D(img, i, j, s);//set the (i,j) pixel value
cvSet2D(img, i, j, scalar);
}
}
}
3.2 Mat图片类型
Mat outputImage, inputImage;
outputImage = inputImage.clone();//图片复制
Mat_<Vec3b>::iterator it = outputImage.begin<Vec3b>();
Mat_<Vec3b>::iterator itend = outputImage.end<Vec3b>();
for (; it != itend; ++it){
(*it)[0] = 0; //操作像素点
(*it)[1] = 0;
(*it)[2] = 0;
}
Mat outputImage, inputImage;
outputImage = inputImage.clone();//图片复制
Mat_<Vec3b>::iterator it = outputImage.begin<Vec3b>();
Mat_<Vec3b>::iterator itend = outputImage.end<Vec3b>();
for (; it != itend; ++it){
(*it)[0] = 0; //操作像素点
(*it)[1] = 0;
(*it)[2] = 0;
}
4 掩膜操作
Mat backImage = cv::imread("test1.jpg"); //掩膜 黑色区域显示原图区域
Mat maskImg = cv::imread("test1.jpg");
Mat img111 = cv::imread("1.jpg");//原图
Mat out;
img111.copyTo(out);
backImage.copyTo(out, maskImg);
imshow("mask", out);
Mat backImage = cv::imread("test1.jpg"); //掩膜 黑色区域显示原图区域
Mat maskImg = cv::imread("test1.jpg");
Mat img111 = cv::imread("1.jpg");//原图
Mat out;
img111.copyTo(out);
backImage.copyTo(out, maskImg);
imshow("mask", out);