C++ C++;程序挂起imshow命令

C++ C++;程序挂起imshow命令,c++,opencv,imshow,C++,Opencv,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++) {

我有一些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;
}
使用名称空间std;
使用名称空间cv;
int main(int argc,字符**argv){

试试这个。它对我很有效,而且符合你所描述的

#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;
}
#包括
#包括“opencv2/core.hpp”
#包括“opencv2/highgui.hpp”
使用名称空间std;
使用名称空间cv;
int main(int argc,char*argv[]){
Mat图像(256,256,CV_8UC1,标量(255));
对于(intj=0;j<256;j++){//索引转到<256,而不是<255
对于(int k=j+1;k<256;k++){//在j+1处开始循环以消除if(k>j)测试
Mat-black(图像,Rect(j,k,1,1));
黑色=标量(0);//标量中只有一个值,因为这是单通道图像
}       
}
cv::imshow(“,图像);
//等钥匙
cv::waitKey(0);
返回0;
}

我做了一些小改动:

  • 循环索引测试应该是
    <256
    ,而不是
    <255
    ,除非您特别不想修改最后一行或最后一列
  • 您可以使用
    int k=j+1
    启动内部循环,以避免不必要的循环迭代和
    if(k>j)
    测试
  • 您正在将
    black
    设置为三通道标量值。当我将其更改为
    Scalar(0,0,0)
    时,我的标量值仍然有效,但您仍然不应该这样做

我尝试了你的代码,它也能工作。你没有提到你正在运行的操作系统。我正在运行操作系统X。

我在你的代码中没有看到imshow命令?我也在想同样的事情。可能重复的代码有几个问题。你到底想做什么?你能解释一下算法吗?你试过把一个非空字符串作为imshow中的窗口名称?我逐字复制粘贴了您的代码,=>仍然存在相同的问题。我的操作系统是Ubuntu 15.10是否有可能显示窗口但不可见?我曾经遇到过OpenCV窗口出现在另一个窗口后面的情况。或者可能您在某个点连接了第二个监视器,并在那里显示它。没有。没有第二个监视器和不,窗口也不是不可见的。不确定还有什么建议。代码是正确的,因此它必须与您的系统配置有关。