Rect CylindricalWarper::buildMaps(Size src_size, InputArray K, InputArray R, OutputArray xmap, OutputArray ymap) { if (ocl::useOpenCL()) { ocl::Kernel k("buildWarpCylindricalMaps", ocl::stitching::warpers_oclsrc); if (!k.empty()) { int rowsPerWI = ocl::Device::getDefault().isIntel() ? 4 : 1; projector_.setCameraParams(K, R); Point dst_tl, dst_br; detectResultRoi(src_size, dst_tl, dst_br); Size dsize(dst_br.x - dst_tl.x + 1, dst_br.y - dst_tl.y + 1); xmap.create(dsize, CV_32FC1); ymap.create(dsize, CV_32FC1); Mat k_rinv(1, 9, CV_32FC1, projector_.k_rinv); UMat uxmap = xmap.getUMat(), uymap = ymap.getUMat(), uk_rinv = k_rinv.getUMat(ACCESS_READ); k.args(ocl::KernelArg::WriteOnlyNoSize(uxmap), ocl::KernelArg::WriteOnly(uymap), ocl::KernelArg::PtrReadOnly(uk_rinv), dst_tl.x, dst_tl.y, projector_.scale, rowsPerWI); size_t globalsize[2] = { dsize.width, (dsize.height + rowsPerWI - 1) / rowsPerWI }; if (k.run(2, globalsize, NULL, true)) { CV_IMPL_ADD(CV_IMPL_OCL); return Rect(dst_tl, dst_br); } } } return RotationWarperBase<CylindricalProjector>::buildMaps(src_size, K, R, xmap, ymap); }
Rect SphericalWarperOcl::buildMaps(Size src_size, InputArray K, InputArray R, OutputArray xmap, OutputArray ymap) { projector_.setCameraParams(K, R); Point dst_tl, dst_br; detectResultRoi(src_size, dst_tl, dst_br); if (ocl::useOpenCL()) { ocl::Kernel k("buildWarpSphericalMaps", ocl::stitching::warpers_oclsrc); if (!k.empty()) { Size dsize(dst_br.x - dst_tl.x + 1, dst_br.y - dst_tl.y + 1); xmap.create(dsize, CV_32FC1); ymap.create(dsize, CV_32FC1); Mat r_kinv(1, 9, CV_32FC1, projector_.r_kinv); UMat uxmap = xmap.getUMat(), uymap = ymap.getUMat(), ur_kinv = r_kinv.getUMat(ACCESS_READ); k.args(ocl::KernelArg::WriteOnlyNoSize(uxmap), ocl::KernelArg::WriteOnly(uymap), ocl::KernelArg::PtrReadOnly(ur_kinv), dst_tl.x, dst_tl.y, projector_.scale); size_t globalsize[2] = { dsize.width, dsize.height }; if (k.run(2, globalsize, NULL, true)) return Rect(dst_tl, dst_br); } } return SphericalWarper::buildMaps(src_size, K, R, xmap, ymap); }
Rect PlaneWarper::buildMaps(Size src_size, InputArray K, InputArray R, InputArray T, OutputArray _xmap, OutputArray _ymap) { projector_.setCameraParams(K, R, T); Point dst_tl, dst_br; detectResultRoi(src_size, dst_tl, dst_br); Size dsize(dst_br.x - dst_tl.x + 1, dst_br.y - dst_tl.y + 1); _xmap.create(dsize, CV_32FC1); _ymap.create(dsize, CV_32FC1); if (ocl::useOpenCL()) { ocl::Kernel k("buildWarpPlaneMaps", ocl::stitching::warpers_oclsrc); if (!k.empty()) { int rowsPerWI = ocl::Device::getDefault().isIntel() ? 4 : 1; Mat k_rinv(1, 9, CV_32FC1, projector_.k_rinv), t(1, 3, CV_32FC1, projector_.t); UMat uxmap = _xmap.getUMat(), uymap = _ymap.getUMat(), uk_rinv = k_rinv.getUMat(ACCESS_READ), ut = t.getUMat(ACCESS_READ); k.args(ocl::KernelArg::WriteOnlyNoSize(uxmap), ocl::KernelArg::WriteOnly(uymap), ocl::KernelArg::PtrReadOnly(uk_rinv), ocl::KernelArg::PtrReadOnly(ut), dst_tl.x, dst_tl.y, projector_.scale, rowsPerWI); size_t globalsize[2] = { dsize.width, (dsize.height + rowsPerWI - 1) / rowsPerWI }; if (k.run(2, globalsize, NULL, true)) { CV_IMPL_ADD(CV_IMPL_OCL); return Rect(dst_tl, dst_br); } } } Mat xmap = _xmap.getMat(), ymap = _ymap.getMat(); float x, y; for (int v = dst_tl.y; v <= dst_br.y; ++v) { for (int u = dst_tl.x; u <= dst_br.x; ++u) { projector_.mapBackward(static_cast<float>(u), static_cast<float>(v), x, y); xmap.at<float>(v - dst_tl.y, u - dst_tl.x) = x; ymap.at<float>(v - dst_tl.y, u - dst_tl.x) = y; } } return Rect(dst_tl, dst_br); }
//Matlab::imrotat() Mat matlabHelper::imrotate(const Mat src, double angle) { cv::Mat dst; cv::Point2f pc(floor(src.cols/2.), floor(src.rows/2.)); cv::Mat r = cv::getRotationMatrix2D(pc, angle, 1.0); cv::warpAffine(src, dst, r, src.size()); Size dsize(dst.rows, dst.cols); cv::resize(dst, dst, dsize, INTER_NEAREST); return dst; }
// Funcion que administra la visualizacion en la GUI void MainWindow::muestraImagen(){ cv::Mat temp; // Conversion de tipo de imagen if( image.channels() > 1 ) cvtColor(image, temp, CV_BGR2RGB); else cvtColor(image, temp, CV_GRAY2RGB); if( temp.rows > temp.cols ) Escaner.rotarImagen(temp,90); cv::Size dsize( 900, 675); cv::resize(temp,temp, dsize); QImage img = QImage((const unsigned char*) (temp.data), temp.cols, temp.rows, QImage::Format_RGB888); // Mostrando en la etiqueta ui->lb_imagen->setPixmap(QPixmap::fromImage(img)); // Reescalando ui->lb_imagen->resize(ui->lb_imagen->pixmap()->size() ); }
/* * * Inputs: * x*,y* -- image location of trapezoid around band * prefix, imNum, suffix -- in_file_path = prefix + imNum + suffix; * * Outputs: Writes a warped/rectified image of the band to a hardcoded location on disk. * * See harness.py */ int main(int argc, char * argv[]) { // declarations cv::Point2f srcQuad[4], dstQuad[4]; cv::Mat warp_matrix, im; std::string filename; cv::Size dsize(2*RECT_X_PADDING+RECT_WIDTH, 2*RECT_Y_PADDING+RECT_HEIGHT); cv::Mat warpedIm(dsize, CV_32FC1); std::cout << "hello world!" << std::endl; if (!(argc == 12)) { std::cout << "Usage: rectifyIm x0 y0 x1 y1 x2 y2 x3 y3 prefix imNum suffix" << std::endl; exit(1); } // Coordinates of trapezoid for(int i=0; i<=3; i++) { srcQuad[i].x = atof(argv[2*i+1]); srcQuad[i].y = atof(argv[2*i+2]); //std::cout << "srcQuad" << i << ": "<<srcQuad[i].x << " " << srcQuad[i].y << std::endl; } // Destination rectangle coordinates dstQuad[0].x = RECT_X_PADDING; dstQuad[0].y = RECT_Y_PADDING + RECT_HEIGHT; dstQuad[1].x = RECT_X_PADDING; dstQuad[1].y = RECT_Y_PADDING; dstQuad[2].x = RECT_X_PADDING + RECT_WIDTH; dstQuad[2].y = RECT_Y_PADDING; dstQuad[3].x = RECT_X_PADDING + RECT_WIDTH; dstQuad[3].y = RECT_Y_PADDING + RECT_HEIGHT; for(int i=0; i<=3; i++) { //std::cout << "dstQuad" << i << ": " << dstQuad[i].x << " " << dstQuad[i].y << std::endl; } // get the transformation matrix warp_matrix = cv::getPerspectiveTransform(srcQuad, dstQuad); std::cout << " warp_matrix " << std::endl; for (int i=0; i<3; i++) { std::cout << warp_matrix.at<float>(i,0) << " " << warp_matrix.at<float>(i,1) << " " << warp_matrix.at<float>(i,2) << std::endl; } // transform image std::string prefix = argv[9]; std::string imNum = argv[10]; std::string suffix = argv[11]; filename = prefix + imNum + suffix; std::cout << filename << std::endl; im = cv::imread(filename, 0); if (im.data == NULL) { std::cout << "Not able to read image." << std::endl; exit(-1); } std::cout << "depth: " << im.depth() << std::endl; /* cv::namedWindow("Before", CV_WINDOW_AUTOSIZE); cv::imshow("Before", im);*/ int flags = cv::INTER_LINEAR; cv::warpPerspective(im, warpedIm, warp_matrix, dsize, flags, cv::BORDER_CONSTANT, cv::Scalar()); /* cv::namedWindow("After", CV_WINDOW_AUTOSIZE); cv::imshow("After", warpedIm); cv::waitKey(0);*/ std::string prefix1 = "/home/jinna/tracking/data/2010Jul01/rect/BandOnly/warped_test1-"; std::string outfile = prefix1 + imNum + suffix; std::cout << outfile << std::endl; std::cout << "out depth: " << warpedIm.depth() << std::endl; cv::imwrite(outfile, warpedIm); return 0; }
void plot(char *flags) { int i, j, k; char *t; int32_t x, y; int ra, dec; int m; Point p, pts[10]; Record *r; Rectangle rect, r1; int dx, dy, nogrid, textlevel, nogrey, zenithup; Image *scr; char *name, buf[32]; double v; if(plotopen() < 0) return; nogrid = 0; nogrey = 0; textlevel = 1; dx = 512; dy = 512; zenithup = 0; for(;;){ if(t = alpha(flags, "nogrid")){ nogrid = 1; flags = t; continue; } if((t = alpha(flags, "zenith")) || (t = alpha(flags, "zenithup")) ){ zenithup = 1; flags = t; continue; } if((t = alpha(flags, "notext")) || (t = alpha(flags, "nolabel")) ){ textlevel = 0; flags = t; continue; } if((t = alpha(flags, "alltext")) || (t = alpha(flags, "alllabel")) ){ textlevel = 2; flags = t; continue; } if(t = alpha(flags, "dx")){ dx = strtol(t, &t, 0); if(dx < 100){ fprint(2, "dx %d too small (min 100) in plot\n", dx); return; } flags = skipbl(t); continue; } if(t = alpha(flags, "dy")){ dy = strtol(t, &t, 0); if(dy < 100){ fprint(2, "dy %d too small (min 100) in plot\n", dy); return; } flags = skipbl(t); continue; } if((t = alpha(flags, "nogrey")) || (t = alpha(flags, "nogray"))){ nogrey = 1; flags = skipbl(t); continue; } if(*flags){ fprint(2, "syntax error in plot\n"); return; } break; } flatten(); folded = 0; if(bbox(0, 0, 1) < 0) return; if(ramax-ramin<100 || decmax-decmin<100){ fprint(2, "plot too small\n"); return; } scr = allocimage(display, Rect(0, 0, dx, dy), RGB24, 0, DBlack); if(scr == nil){ fprint(2, "can't allocate image: %r\n"); return; } rect = scr->r; rect.min.x += 16; rect = insetrect(rect, 40); if(setmap(ramin, ramax, decmin, decmax, rect, zenithup) < 0){ fprint(2, "can't set up map coordinates\n"); return; } if(!nogrid){ for(x=ramin; ; ){ for(j=0; j<nelem(pts); j++){ /* use double to avoid overflow */ v = (double)j / (double)(nelem(pts)-1); v = decmin + v*(decmax-decmin); pts[j] = map(x, v); } bezspline(scr, pts, nelem(pts), Endsquare, Endsquare, 0, GREY, ZP); ra = x; if(folded){ ra -= 180*c; if(ra < 0) ra += 360*c; } p = pts[0]; p.x -= stringwidth(font, hm5(angle(ra)))/2; string(scr, p, GREY, ZP, font, hm5(angle(ra))); p = pts[nelem(pts)-1]; p.x -= stringwidth(font, hm5(angle(ra)))/2; p.y -= font->height; string(scr, p, GREY, ZP, font, hm5(angle(ra))); if(x == ramax) break; x += gridra(mapdec); if(x > ramax) x = ramax; } for(y=decmin; y<=decmax; y+=c){ for(j=0; j<nelem(pts); j++){ /* use double to avoid overflow */ v = (double)j / (double)(nelem(pts)-1); v = ramin + v*(ramax-ramin); pts[j] = map(v, y); } bezspline(scr, pts, nelem(pts), Endsquare, Endsquare, 0, GREY, ZP); p = pts[0]; p.x += 3; p.y -= font->height/2; string(scr, p, GREY, ZP, font, deg(angle(y))); p = pts[nelem(pts)-1]; p.x -= 3+stringwidth(font, deg(angle(y))); p.y -= font->height/2; string(scr, p, GREY, ZP, font, deg(angle(y))); } } /* reorder to get planets in front of stars */ tolast(nil); tolast("moon"); /* moon is in front of everything... */ tolast("shadow"); /* ... except the shadow */ for(i=0,r=rec; i<nrec; i++,r++){ dec = r->ngc.dec; ra = r->ngc.ra; if(folded){ ra -= 180*c; if(ra < 0) ra += 360*c; } if(textlevel){ name = nameof(r); if(name==nil && textlevel>1 && r->type==SAO){ snprint(buf, sizeof buf, "SAO%ld", r->index); name = buf; } if(name) drawname(scr, nogrey? display->white : alphagrey, name, ra, dec); } if(r->type == Planet){ drawplanet(scr, &r->planet, map(ra, dec)); continue; } if(r->type == SAO){ m = r->sao.mag; if(m == UNKNOWNMAG) m = r->sao.mpg; if(m == UNKNOWNMAG) continue; m = dsize(m); if(m < 3) fillellipse(scr, map(ra, dec), m, m, nogrey? display->white : lightgrey, ZP); else{ ellipse(scr, map(ra, dec), m+1, m+1, 0, display->black, ZP); fillellipse(scr, map(ra, dec), m, m, display->white, ZP); } continue; } if(r->type == Abell){ ellipse(scr, addpt(map(ra, dec), Pt(-3, 2)), 2, 1, 0, lightblue, ZP); ellipse(scr, addpt(map(ra, dec), Pt(3, 2)), 2, 1, 0, lightblue, ZP); ellipse(scr, addpt(map(ra, dec), Pt(0, -2)), 1, 2, 0, lightblue, ZP); continue; } switch(r->ngc.type){ case Galaxy: j = npixels(r->ngc.diam); if(j < 4) j = 4; if(j > 10) k = j/3; else k = j/2; ellipse(scr, map(ra, dec), j, k, 0, lightblue, ZP); break; case PlanetaryN: p = map(ra, dec); j = npixels(r->ngc.diam); if(j < 3) j = 3; ellipse(scr, p, j, j, 0, green, ZP); line(scr, Pt(p.x, p.y+j+1), Pt(p.x, p.y+j+4), Endsquare, Endsquare, 0, green, ZP); line(scr, Pt(p.x, p.y-(j+1)), Pt(p.x, p.y-(j+4)), Endsquare, Endsquare, 0, green, ZP); line(scr, Pt(p.x+j+1, p.y), Pt(p.x+j+4, p.y), Endsquare, Endsquare, 0, green, ZP); line(scr, Pt(p.x-(j+1), p.y), Pt(p.x-(j+4), p.y), Endsquare, Endsquare, 0, green, ZP); break; case DiffuseN: case NebularCl: p = map(ra, dec); j = npixels(r->ngc.diam); if(j < 4) j = 4; r1.min = Pt(p.x-j, p.y-j); r1.max = Pt(p.x+j, p.y+j); if(r->ngc.type != DiffuseN) draw(scr, r1, ocstipple, ocstipple, ZP); line(scr, Pt(p.x-j, p.y-j), Pt(p.x+j, p.y-j), Endsquare, Endsquare, 0, green, ZP); line(scr, Pt(p.x-j, p.y+j), Pt(p.x+j, p.y+j), Endsquare, Endsquare, 0, green, ZP); line(scr, Pt(p.x-j, p.y-j), Pt(p.x-j, p.y+j), Endsquare, Endsquare, 0, green, ZP); line(scr, Pt(p.x+j, p.y-j), Pt(p.x+j, p.y+j), Endsquare, Endsquare, 0, green, ZP); break; case OpenCl: p = map(ra, dec); j = npixels(r->ngc.diam); if(j < 4) j = 4; fillellipse(scr, p, j, j, ocstipple, ZP); break; case GlobularCl: j = npixels(r->ngc.diam); if(j < 4) j = 4; p = map(ra, dec); ellipse(scr, p, j, j, 0, lightgrey, ZP); line(scr, Pt(p.x-(j-1), p.y), Pt(p.x+j, p.y), Endsquare, Endsquare, 0, lightgrey, ZP); line(scr, Pt(p.x, p.y-(j-1)), Pt(p.x, p.y+j), Endsquare, Endsquare, 0, lightgrey, ZP); break; } } flushimage(display, 1); displayimage(scr); }