示例#1
0
 WatermarkNode(
   const std::string & input, const std::string & output, const std::string & text,
   const std::string & node_name = "watermark_node")
 : Node(node_name, true)
 {
   auto qos = rmw_qos_profile_sensor_data;
   // Create a publisher on the input topic.
   pub_ = this->create_publisher<sensor_msgs::msg::Image>(output, qos);
   std::weak_ptr<std::remove_pointer<decltype(pub_.get())>::type> captured_pub = pub_;
   // Create a subscription on the output topic.
   sub_ = this->create_subscription<sensor_msgs::msg::Image>(
     input, [captured_pub, text](sensor_msgs::msg::Image::UniquePtr msg) {
     auto pub_ptr = captured_pub.lock();
     if (!pub_ptr) {
       return;
     }
     // Create a cv::Mat from the image message (without copying).
     cv::Mat cv_mat(
       msg->width, msg->height,
       encoding2mat_type(msg->encoding),
       msg->data.data());
     // Annotate the image with the pid, pointer address, and the watermark text.
     std::stringstream ss;
     ss << "pid: " << GETPID() << ", ptr: " << msg.get() << " " << text;
     draw_on_image(cv_mat, ss.str(), 40);
     pub_ptr->publish(msg);    // Publish it along.
   }, qos);
 }
示例#2
0
// the function the thread will run when it is called
void ProcessingThread::run()
{
    while(1)
    {
        /////////////////////////////////
        // Stop thread if stopped=TRUE //
        /////////////////////////////////
        stoppedMutex.lock();
        if (stopped)
        {
            stopped=false;
            stoppedMutex.unlock();
            break;
        }
        stoppedMutex.unlock();
        /////////////////////////////////
        /////////////////////////////////

        // Save processing time
        processingTime=t.elapsed();
        // Start timer (used to calculate processing rate)
        t.start();
        // Get frame from queue
        Mat currentFrame=imageBuffer->getFrame();
        // Make copy of current frame (processing will be performed on this copy)
        currentFrame.copyTo(currentFrameCopy);
        // Set ROI of currentFrameCopy
        currentFrameCopy.locateROI(frameSize,framePoint);
        currentFrameCopy.adjustROI(-currentROI.y,-(frameSize.height-currentROI.height-currentROI.y),
                                   -currentROI.x,-(frameSize.width-currentROI.width-currentROI.x));

        updateMembersMutex.lock();

        updateMembersMutex.unlock();

        // Update statistics
        updateFPS(processingTime);
        currentSizeOfBuffer=imageBuffer->getSizeOfImageBuffer();

        if (decideToProcess()){
            writeHistory();

            // set the black level
            if (SetBlackFlag == 1){
                blackVal = setBlackCalib(currentFrame);
                SetBlackFlag = 0;
            }

            process(&currentFrame);
        }
        draw_on_image(GameState.table, &currentFrameCopy);
        frame=MatToQImage(currentFrameCopy);

        emit newFrame(frame);
        //printTest();

        //@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
    }
    qDebug() << "Stopping processing thread...";
}
示例#3
0
文件: wizard.c 项目: dmalves/cage
/* **slide\_title\_in()**, **slide\_title\_out()** and
 * **bling\_title()** are used by the level
 * timeline to animate the title.
 *
 * We use cosine interpolation to slide the title in
 * and out, creating a smoother effect.
 *
 * **progress** will hold a value between 0 to 1
 * based on the event progess/duration, making it ideal
 * for use with interpolation functions.
 */
static void* before_title_in(void* data, float elapsed_ms, float progress)
{
    struct rectangle c = { 0, 0, 192, 108 };
    struct rectangle r = { 0, 0, 64, 64 };
    struct level_data* ldata = data;
    UNUSED(elapsed_ms);
    UNUSED(progress);
    clear_image(ldata->title.mask, color_from_RGB(0, 0, 0));
    draw_on_image(ldata->title.mask);
    draw_image(ldata->title.spot, -15, 40, &r, 0);
    draw_on_screen();
    draw_image(ldata->title.mask, 0, 0, &c, 0);
    return NULL;
}
示例#4
0
文件: wizard.c 项目: dmalves/cage
static void* slide_title_in(void* data, float elapsed_ms, float progress)
{
    struct rectangle c = { 0, 0, 192, 108 };
    struct rectangle r = { 0, 0, 64, 64 };
    struct level_data* ldata = data;
    UNUSED(elapsed_ms);
    clear_image(ldata->title.mask,
                color_from_RGB(255 * progress, 255 * progress, 255 * progress));
    draw_on_image(ldata->title.mask);
    draw_image(ldata->title.spot, -15, 40, &r, 0);
    draw_on_screen();
    draw_image(ldata->title.mask, 0, 0, &c, 0);
    draw_sprite(ldata->title.sprite,
                interpolate(-100, 20, progress, circular_ease_out), 10);
    return NULL;
}
示例#5
0
int main(int argc, char** argv)
{
    static const char* names[] = {  "D:\\Adi\\blackjack\\avacam\\CamSnapShots\\Cam0000.bmp",
									"D:\\Adi\\blackjack\\avacam\\CamSnapShots\\Cam0001.bmp",
									"D:\\Adi\\blackjack\\avacam\\CamSnapShots\\Cam0001.bmp", // bad
									"D:\\Adi\\blackjack\\avacam\\CamSnapShots\\Cam0003.bmp",
									"D:\\Adi\\blackjack\\avacam\\CamSnapShots\\Cam0004.bmp",
									"D:\\Adi\\blackjack\\avacam\\CamSnapShots\\Cam0005.bmp",
									"D:\\Adi\\blackjack\\avacam\\CamSnapShots\\Cam0006.bmp",
									"D:\\Adi\\blackjack\\avacam\\CamSnapShots\\Cam0007.bmp",
									"D:\\Adi\\blackjack\\avacam\\CamSnapShots\\Cam0008.bmp",
									"D:\\Adi\\blackjack\\avacam\\CamSnapShots\\Cam0009.bmp",
									"D:\\Adi\\blackjack\\avacam\\CamSnapShots\\Cam0010.bmp",
									"D:\\Adi\\blackjack\\avacam\\CamSnapShots\\Cam0011.bmp",
									"D:\\Adi\\blackjack\\avacam\\CamSnapShots\\Cam0012.bmp",
									"D:\\Adi\\blackjack\\avacam\\CamSnapShots\\Cam0013.bmp",
									"D:\\Adi\\blackjack\\avacam\\CamSnapShots\\Cam0014.bmp",
									"D:\\Adi\\blackjack\\avacam\\CamSnapShots\\Cam0015.bmp",
									"D:\\Adi\\blackjack\\avacam\\CamSnapShots\\Cam0016.bmp",
									"D:\\Adi\\blackjack\\avacam\\CamSnapShots\\Cam0017.bmp",
									"D:\\Adi\\blackjack\\avacam\\CamSnapShots\\Cam0018.bmp",
									"D:\\Adi\\blackjack\\avacam\\CamSnapShots\\Cam0019.bmp",
									"D:\\Adi\\blackjack\\avacam\\CamSnapShots\\Cam0020.bmp",
									"D:\\Adi\\blackjack\\avacam\\CamSnapShots\\Cam0021.bmp",
									"D:\\Adi\\blackjack\\avacam\\CamSnapShots\\Cam0022.bmp",
									"D:\\Adi\\blackjack\\avacam\\CamSnapShots\\Cam0023.bmp",
									"D:\\Adi\\blackjack\\avacam\\CamSnapShots\\Cam0024.bmp",
									"D:\\Adi\\blackjack\\avacam\\CamSnapShots\\Cam0025.bmp",
									 0 };
	
	IplImage * Glyphs[13];
	IpVec keypoints[13];
	preLoadGlyphs(Glyphs ,keypoints);

	gameTable oldTable;
	oldTable.numCards = 0;

	for( int i = 0; i<100 != 0; i++ )
    {

        Mat image = imread(names[0+i%25], 1);
        if( image.empty() )
        {
            printf("%s%d","\n couldnt load frame num: ",i);
            continue;
        }
		//imshow("table - read", image);
		gameTable Table;
		getTableFromMat(& Table, &image);



		printf("%s%d","\n frame num: ",i);

		fill_known_cards(&Table,&oldTable,image,Glyphs, keypoints,70,20); //play with the nums


		draw_on_image(Table,image);

		for (int i=0; i<Table.players.size() ; i++)
		{
			printf("%s%d","\n		hand number: ",i);
			for (int j=0; j<Table.players[i].cards.size() ; j++)
			{
				printf("%s%d%s%c","\n			card: ",j," is:",Table.players[i].cards[j].value);
				
			}
		}

		char c = waitKey(20);
        if( (char)c == 27 )
            break;
		oldTable = Table;
			
    }

    return 0;
}