gpt4 book ai didi

c++ - 为什么我不能在我的函数中访问对象?

转载 作者:行者123 更新时间:2023-11-28 06:46:47 27 4
gpt4 key购买 nike

我有一个函数可以检测两帧之间的运动,并将仅移动对象的裁剪图像存储在变量 cv::Mat result_cropped 中。现在我想添加一个函数来检查 result_cropped 是否有黑色像素。我轻松地为此编写了代码,但我完全坚持尝试在我的类里面实现它。

出于某种原因,我的 blackDetection(Mat & cropped) 无法访问导致程序崩溃的裁剪图像。这是我的简化代码:

void ActualRec::run(){

while (isActive){

//...code to check for motion
//if there was motion a cropped image will be stored in result_cropped
number_of_changes = detectMotion(motion, result, result_cropped, region, max_deviation, color);

if(number_of_changes>=there_is_motion) {
if(number_of_sequence>0){
// there was motion detected, store cropped image - this works
saveImg(pathnameThresh, result_cropped);

if (blackDetection(result_cropped)==true){
//the cropped image has black pixels
}
else {
//the cropped image has no black pixels

}
number_of_sequence++;
}
else
{
// no motion was detected
}
}
}

bool ActualRec::blackDetection(Mat & result_cropped){
//...check for black pixels, program crashes since result_cropped is empty
//if i add imshow("test",result_cropped) I keep getting an empty window
if (blackPixelCounter>0){
return true;
}
else return false;
}

同样,问题是我无法访问 blackDetection(Mat & result_cropped) 中的 result_cropped。

\\编辑:我这个类的完整代码http://pastebin.com/3i0WdLG0 .请有人帮助我。这个问题对我来说没有任何意义..

最佳答案

您没有 cv::waitKey()blackDetection() ,所以你会在到达 cvWaitKey() 之前崩溃在run() .你是在妄下结论 result_cropped是“空的”。

您还没有分配croppedBlack任何地方,所以你会在 croppedBlack.at<Vec3b>(y,x)[c] = 上崩溃.

blackDetection() 的开头添加这个(例如):

croppedBlack.create(result_cropped.size(), result_cropped.type());

要使其更快,请参阅 How to scan images ... with OpenCV : The efficient way

bool ActualRec::blackDetection(Mat& result_cropped)
{
croppedBlack.create(result_cropped.size(), result_cropped.type());

int blackCounter = 0;
for(int y = 0; y < result_cropped.rows; ++y)
{
Vec3b* croppedBlack_row = croppedBlack.ptr<Vec3b>(y);
Vec3b* result_cropped_row = result_cropped.ptr<Vec3b>(y);

for(int x = 0; x < result_cropped.cols; ++x)
{
for(int c = 0; c < 3; ++c)
{
croppedBlack_row[x][c] =
saturate_cast<uchar>(alpha * result_cropped_row[x][c] + beta);
}
}
}
}

关于c++ - 为什么我不能在我的函数中访问对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24851296/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com