OpenCV + visualStudio,试图访问像素的C ++代码错误

时间:2017-12-28 14:47:46

标签: c++ visual-studio opencv

我和乔是我这个网站的新成员。 让我们谈谈......我开始使用visual studio上的openCV库用c ++编程,但我对图像的像素有疑问。 我写了一个代码来计算alpha通道的平均值(像素的foruth分量,以及B,G,R强度的值)。 在此输入图像描述 我陷入了错误,我不知道如何解决它。 这是我的代码

      #include "stdafx.h"
#include "opencv2\highgui\highgui.hpp"
#include "opencv2\core\core.hpp"
#include "opencv2\opencv.hpp"

using namespace cv;
using namespace std;

int main() {
    Mat image;
    image = imread("C:/Users/Joe/Desktop/prova/paesaggioLuminoso.jpg", 1);
    namedWindow("Picture", WINDOW_AUTOSIZE); 
    imshow("Picture", image);
    waitKey(0);

    int averageAlpha = 0;
    int partial = 0;



    for (int i = 0; i < image.rows; i++) {
        for (int j = 0; j < image.cols; j++) {



            partial = partial +image.at<Vec4b>(i, j)[3];



            if (i == image.rows - 1 && j == image.cols - 1) {
                averageAlpha = partial / (image.rows * image.cols);

                cout << "Average of alpha channel is " << averageAlpha << endl;

            }

        }
    }

    return 0;
}

请注意,如果我尝试计算B强度(或绿色或红色)的平均值,我的程序会正确运行。

但是这个第四个频道我有这个错误信息: Secondo Progetto OpenCV.exe中0x00007FFC47603FB8处的未处理异常:Microsoft C ++异常:cv ::内存位置0x000000162E2FF3E0的异常。

断言失败((无符号)(i1 * DataType&lt; _Tp&gt; :: channels)&lt;(unsigned)(size.p 1 * channels()))in cv :: Mat :: at,file c:\ users \ joe \ desktop \ joe \ opencv \ opencv \ build \ include \ opencv2 \ core \ mat.inl.hpp,第1095行

感谢您的帮助!祝你有美好的一天 !

编辑:这是我在评论中提到的错误

Errors in visual studio with a correct code

Other errors

enter image description here

1 个答案:

答案 0 :(得分:0)

你传递的旗帜'1'等于IMREAD_COLOR,请看:https://github.com/opencv/opencv/blob/master/modules/imgcodecs/include/opencv2/imgcodecs.hpp

IMREAD_COLOR会丢弃Alpha通道,请看这个 https://docs.opencv.org/3.1.0/d4/da8/group__imgcodecs.html#ga61d9b0126a3e57d9277ac48327799c80

所以你应该这样做

image = imread("C:/Users/Joe/Desktop/prova/paesaggioLuminoso.jpg", IMREAD_UNCHANGED);