opencv — C ++ программа зависает по команде imshow

У меня есть C ++ — код, который по какой-то причине продолжает висеть.
Это код:

using namespace std;
using namespace cv;int main(int argc, char** argv) {

cout <<"started";
Mat im(256, 256, CV_8UC1, cv::Scalar(255));
for (int j = 0; j < 255; j++) {
for (int k = 0; k < 255; k++) {

if (k > j) {
cv::Mat black(im, cv::Rect(j, k, 1, 1));
black = cv::Scalar(0, 0, 0);
}

}
}

Mat image2;
//cvtColor(image, image2, CV_BGR2GRAY);
cout<<"started";
imshow("", im);
waitKey(0);

return 0;
}

Теперь я пробовал это в течение 3 дней, буквально стирая каждую строку этого кода и помещая его обратно, все сводится к следующему:

должен быть
imshow ()
что приводит к зависанию программы, так что изображение не отображается.

Странно то, что я дословно скопировал мою более старую программу, она работала, даже работала в новом проекте в течение дня, а затем ВНУТРЕННЕЕ зависла, что означает, что программа просто продолжает работать и работать без какого-либо результата и не может быть закрыта вниз.

Очевидно, я, должно быть, упускаю из виду здесь что-то простое, но я просто не могу его найти.

Помогите, пожалуйста?

Моя ОС — Ubuntu 15.10. Кроме того, я только что опробовал ответ SSteves => та же проблема.
Так что, должно быть, какая-то утечка памяти, а не мой код, верно? Как, черт возьми, вы исправляете утечки памяти?

-3

Решение

Попробуй это. Это работает для меня и делает то, что вы описываете.

#include <iostream>

#include "opencv2/core.hpp"#include "opencv2/highgui.hpp"
using namespace std;
using namespace cv;

int main(int argc, char *argv[]) {
Mat image(256, 256, CV_8UC1, Scalar(255));
for (int j = 0; j < 256; j++) { //index goes to < 256, not < 255
for (int k = j + 1; k < 256; k++) { //start loop at j + 1 to eliminate if (k > j) test
Mat black(image, Rect(j, k, 1, 1));
black = Scalar(0); //only one value in Scalar since this is a single-channel image
}
}
cv::imshow("", image);
// wait for key
cv::waitKey(0);

return 0;
}

черная / белая диагональ

Я сделал пару небольших изменений:

  • Тест индекса цикла должен быть < 256не < 255 если вы специально не хотите изменять последнюю строку или столбец.
  • Вы можете начать внутренний цикл с int k = j + 1 чтобы избежать ненужных итераций цикла и тому if (k > j) тестовое задание.
  • Вы устанавливаете black в трехканальное скалярное значение. Мой все еще работает, когда я изменил его Scalar(0, 0, 0) но ты все равно не должен этого делать.

Я попробовал ваш код, и он также работает. Вы не упоминаете, какую ОС вы используете. Я использую OS X.

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]