23,125
社区成员
发帖
与我相关
我的任务
分享
void MainWindow::on_AOI_clicked()
{
cv::namedWindow("noise");
cv::namedWindow("output");
cv::Mat pattern;//(653,994,CV_8UC3,cv::Scalar(100,100,100));
cv::Mat aux,thr30,thr140;
cv::Mat clean = cv::imread("/home/kylin/图片/2.jpg");
cv::blur(clean,pattern,cv::Size(clean.cols/3,clean.cols/3));
//cv::imshow("pattern",pattern);//背景近似值
aux = pattern - clean;
cv::medianBlur(aux,noise,3);//除噪
cv::threshold(aux,thr30,30,255,cv::THRESH_BINARY);
cv::threshold(aux,thr140,140,255,cv::THRESH_BINARY_INV);//二值化
//cv::imshow("clean",thr30);
cv::imshow("noise",thr140);
thr140.convertTo(thr140,CV_8UC1);//转换为8位格式
cv::imshow("aux",thr140);
cv::Mat labels;
int num_objects = cv::connectedComponents(thr140,labels,8,CV_32S);//此处过不去。
//int num_objects = 6;
if(num_objects < 2)
{
qDebug()<< "No objects detected" << endl;
}
else
qDebug()<< "Number of objects detected: "<< num_objects - 1 << endl;
//创建彩色目标的输出图像
cv::Mat output = cv::Mat::zeros(thr140.rows,thr140.cols,CV_8UC3);
cv::RNG rng(0xFFFFFFFF);
for(int i=1;i < num_objects;i++)
{
cv::Mat mask = labels==i;
output.setTo(randomColor(rng),mask);
}
cv::imshow("output",output);