为什么设计好app页面,运行过程中的imwrite函数不能正常运行,提示
“错误使用imwrite(line 541)
无法打开要写入的文件“process\灰度图.jpg”。您可能没有写入权限。”
函数声明:bool imwrite(const string& filename,InputArray img,const vector& params = vector());
参数1:文件名,要加上后缀。
参数2:Mat类型的数据
参数3:特定格式保存的参数编码,一般不需要填写。
如果填写的话要遵循一下规则:
复制对象:
Mat对象的使用
对象的创建:
Mat smallDst(100,100,CV_8UC3,Scalar(0,0,255));
其中前两个是行和列,8代表每个通道8位,U代表无符号,c代表char类型,3代表3通道,第四个参数和第三个参数对应。
创建一个相同大小的图片框,并设置图片颜色
#include <opencv2/opencv.hpp>
#include <iostream>
using namespace std;
using namespace cv;
int main() {
Mat src;
src = imread("C:/Users/fh/Pictures/001.png");
if (src.empty()) {
printf("could not load image...");
return -1;
}
namedWindow("img", WINDOW_AUTOSIZE);
imshow("img", src);
Mat dst;
dst = Mat(src.size(), src.type());
dst = Scalar(127, 0, 255);
namedWindow("src", WINDOW_AUTOSIZE);
imshow("src", dst);
waitKey(0);
return 0;
}
#include <opencv2/opencv.hpp>
#include <iostream>
using namespace std;
using namespace cv;
int main() {
Mat src;
src = imread("C:/Users/fh/Pictures/001.png");
if (src.empty()) {
printf("could not load image...");
return -1;
}
//namedWindow("img", WINDOW_AUTOSIZE);
//imshow("img", src);
Mat dst;
//dst = Mat(src.size(), src.type());
//dst = Scalar(127, 0, 255);
//dst = src.clone(); // 拷贝图片
//src.copyTo(dst); // 拷贝图片
cvtColor(src, dst, COLOR_BGR2GRAY);
printf("原图像通道:%d\n", src.channels());
printf("灰度图像通道:%d\n", dst.channels());
//查看单行像素
const uchar* firstRow = src.ptr<uchar>(0);
const uchar* firstRowG = dst.ptr<uchar>(0);
printf("原图单行像素:%d\n", *firstRow);
printf("灰度单行像素:%d\n", *firstRowG);
//namedWindow("src", WINDOW_AUTOSIZE);
//imshow("src", dst);
//创建新的一个小的图像可以用来测试逻辑
Mat smallDst(100,100,CV_8UC3,Scalar(0,0,255));
namedWindow("smallDst", WINDOW_AUTOSIZE);
imshow("smallDst", smallDst);
waitKey(0);
return 0;
}
用管理员权限运行matlab看看,关闭其它可能占用了这个文件的软件,比如图像查看软件等