OpenCV 2.4.11で実装しています。
マスク画像を用意し、マスク画像の黒部分をソース画像の透明部分としています。
なお、imshowでは透過部分の表示には対応していないため、透過であることを確認するために画像で書き出しています。
#include <cv.h>
#include <highgui.h>
int main(int argc, char** argv)
{
cv::Mat image = cv::imread("image.jpg");
cv::imshow("image", image);
std::vector<cv::Mat> channels;
cv::split(image, channels);
cv::Mat mask = cv::imread("mask.jpg", 0);
channels.push_back(mask);
cv::Mat new_image;
cv::merge(channels, new_image);
cv::imshow("new image", new_image);
cv::imwrite("new.png", new_image);
cv::waitKey(0);
}