OpenCV + visual Studio,尝试访问像素的C ++代码错误

问题描述 投票:0回答:1

我是乔,我是这个网站的新成员。让我们谈谈......我开始使用visual studio上的openCV库用c ++编程,但我对图像的像素有疑问..我写了一个代码来计算alpha通道的平均值(像素的foruth分量,in除了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 <_Tp> :: channels)<(unsigned)(size.p1 * channels()))在cv :: Mat :: at,文件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

c++ visual-studio opencv
1个回答
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);
© www.soinside.com 2019 - 2024. All rights reserved.