matlab的app设计界面运行失败

为什么设计好app页面,运行过程中的imwrite函数不能正常运行,提示
“错误使用imwrite(line 541)
无法打开要写入的文件“process\灰度图.jpg”。您可能没有写入权限。”

不知道你这个问题是否已经解决, 如果还没有解决的话:
  • 你看下这篇博客吧, 应该有用👉 :matlab中imwrite函数
  • 除此之外, 这篇博客: Mat函数的使用中的 输出图像到文件:imwrite()函数 部分也许能够解决你的问题, 你可以仔细阅读以下内容或者直接跳转源博客中阅读:

    函数声明:bool imwrite(const string& filename,InputArray img,const vector& params = vector());
    参数1:文件名,要加上后缀。
    参数2:Mat类型的数据
    参数3:特定格式保存的参数编码,一般不需要填写。
    如果填写的话要遵循一下规则:

    • 对于 JPEG 格式的图片,这个参数表示从 0 到 100 的图片质量(CV_IMWRITE_JPEG_QUALITY),默认值是95。
    • 对于 PNG 格式的图片,这个参数表示压缩级别(CV_IMWRITE_PNG_COMPRESSION)从 0 到 9。较高的值意味着更小的尺寸和更长的压缩时间,默认值是3。
    • 对于PPM,PGM,或PBM格式的图片,这个参数表示一个二进制格式标志(CV_IMWRITE_PXM_BINARY),取值为0或1,默认值是1。

    复制对象:

    1. 完全复制,复制对象的头和数据部分
      M.clone()
      A.copyTo(M)
    2. 部分复制,只复制对象的头和指针
      imread(imgFilePath);

    Mat对象的使用

    1. 输出的内存是自动分配的
    2. 赋值操作和拷贝构造函数只会复制头部份
    3. clone和copyTo是完全复制

    对象的创建:
    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看看,关闭其它可能占用了这个文件的软件,比如图像查看软件等